diff --git a/CHANGELOG.md b/CHANGELOG.md index 6317dfa..7cc3652 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,5 +2,6 @@ * add `role_name` config option to overwrite name of the role * fix not aborting overwrite dialog * fix failed loading of empty yaml files + * fix failed loading of yaml files containing `!unsafe` tag * FEATURE * add basic hugo theme diff --git a/ansibledoctor/DocumentationParser.py b/ansibledoctor/DocumentationParser.py index 6136c4a..19abd3d 100644 --- a/ansibledoctor/DocumentationParser.py +++ b/ansibledoctor/DocumentationParser.py @@ -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}} diff --git a/ansibledoctor/Utils.py b/ansibledoctor/Utils.py index ad18251..24a9f20 100644 --- a/ansibledoctor/Utils.py +++ b/ansibledoctor/Utils.py @@ -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):