add custom yaml constructor to load ansible unsafe tag

This commit is contained in:
Robert Kaussow 2020-02-24 19:10:17 +01:00
parent 92979aa6ff
commit d133d63fbf
2 changed files with 13 additions and 0 deletions

View File

@ -15,6 +15,7 @@ from ansibledoctor.Config import SingleConfig
from ansibledoctor.Contstants import YAML_EXTENSIONS
from ansibledoctor.FileRegistry import Registry
from ansibledoctor.Utils import SingleLog
from ansibledoctor.Utils import UnsafeTag
class Parser:
@ -35,6 +36,7 @@ class Parser:
if any(fnmatch.fnmatch(rfile, "*/defaults/*." + ext) for ext in YAML_EXTENSIONS):
with open(rfile, "r", encoding="utf8") as yaml_file:
try:
ruamel.yaml.add_constructor(UnsafeTag.yaml_tag, UnsafeTag.yaml_constructor, constructor=ruamel.yaml.SafeConstructor)
data = defaultdict(dict, (ruamel.yaml.safe_load(yaml_file) or {}))
for key, value in data.items():
self._data["var"][key] = {"value": {key: value}}

View File

@ -191,6 +191,17 @@ class SingleLog(Log, metaclass=Singleton):
pass
class UnsafeTag:
yaml_tag = u'!unsafe'
def __init__(self, value):
self.unsafe = value
@staticmethod
def yaml_constructor(loader, node):
return loader.construct_scalar(node)
class FileUtils:
@staticmethod
def create_path(path):