"""Checks related to ansible roles files.""" from ansible.parsing.yaml.objects import AnsibleMapping from nested_lookup import nested_lookup from ansiblelater.command.candidates import Error from ansiblelater.command.candidates import Result from ansiblelater.utils.rulehelper import get_raw_yaml from ansiblelater.utils.rulehelper import get_tasks def check_meta_main(candidate, settings): content, errors = get_raw_yaml(candidate, settings) keys = ["author", "description", "min_ansible_version", "platforms", "dependencies"] description = "file should contain '{key}' key" if not errors: for key in keys: if not nested_lookup(key, content): errors.append(Error(None, description.format(key=key))) return Result(candidate.path, errors) def check_scm_in_src(candidate, settings): roles, errors = get_tasks(candidate, settings) description = "usage of src: scm+url not recommended" if not errors: for role in roles: if isinstance(role, AnsibleMapping): if "+" in role.get("src"): errors.append(Error(role["__line__"], description)) return Result(candidate.path, errors)