validate-modules: don't error on valid Ansible YAML in EXAMPLES

This commit is contained in:
Paul Arthur 2021-04-22 06:48:43 +00:00 committed by Matt Clay
parent 567361b124
commit 7b5dad2321
3 changed files with 15 additions and 5 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- ansible-test validate-modules - EXAMPLES will no longer be marked as invalid YAML when it uses Ansible-specific YAML tags (https://github.com/ansible/ansible/pull/74384).

View file

@ -1069,7 +1069,8 @@ class ModuleValidator(Validator):
else: else:
_doc, errors, traces = parse_yaml(doc_info['EXAMPLES']['value'], _doc, errors, traces = parse_yaml(doc_info['EXAMPLES']['value'],
doc_info['EXAMPLES']['lineno'], doc_info['EXAMPLES']['lineno'],
self.name, 'EXAMPLES', load_all=True) self.name, 'EXAMPLES', load_all=True,
ansible_loader=True)
for error in errors: for error in errors:
self.reporter.error( self.reporter.error(
path=self.object_path, path=self.object_path,

View file

@ -31,7 +31,9 @@ import yaml.reader
from ansible.module_utils._text import to_text from ansible.module_utils._text import to_text
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.common.yaml import SafeLoader
from ansible.module_utils.six import string_types from ansible.module_utils.six import string_types
from ansible.parsing.yaml.loader import AnsibleLoader
class AnsibleTextIOWrapper(TextIOWrapper): class AnsibleTextIOWrapper(TextIOWrapper):
@ -133,18 +135,23 @@ def get_module_name_from_filename(filename, collection):
return name return name
def parse_yaml(value, lineno, module, name, load_all=False): def parse_yaml(value, lineno, module, name, load_all=False, ansible_loader=False):
traces = [] traces = []
errors = [] errors = []
data = None data = None
if load_all: if load_all:
loader = yaml.safe_load_all yaml_load = yaml.load_all
else: else:
loader = yaml.safe_load yaml_load = yaml.load
if ansible_loader:
loader = AnsibleLoader
else:
loader = SafeLoader
try: try:
data = loader(value) data = yaml_load(value, Loader=loader)
if load_all: if load_all:
data = list(data) data = list(data)
except yaml.MarkedYAMLError as e: except yaml.MarkedYAMLError as e: