diff options
author | Brian Coca <bcoca@users.noreply.github.com> | 2020-10-28 11:46:39 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-28 11:46:39 -0400 |
commit | e05c62547b3d547ffb433d1cf66e82b353f24262 (patch) | |
tree | 8993ef10cd6fee12bb09c8990991daa04455e2cc /lib/ansible/playbook | |
parent | 8f9cf456b032691adffa46e1b9ed8c87168438af (diff) | |
download | ansible-e05c62547b3d547ffb433d1cf66e82b353f24262.tar.gz |
run playbook from collections (#67435)
* fixes for collection playbooks
- add fqcn invocation, also handles extensions
- bring import_playbook into new normal
- avoid adding collection playbooks to adjacency
- deal with extensions or lack of em
- added tests
- fix bugs with multiple playbooks supplied
- unicode/bytes/native fixes
- fix modulenotfound for < py3.7
- tests
Diffstat (limited to 'lib/ansible/playbook')
-rw-r--r-- | lib/ansible/playbook/playbook_include.py | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/lib/ansible/playbook/playbook_include.py b/lib/ansible/playbook/playbook_include.py index ad7284e28e..04486ec7e0 100644 --- a/lib/ansible/playbook/playbook_include.py +++ b/lib/ansible/playbook/playbook_include.py @@ -22,6 +22,7 @@ __metaclass__ = type import os from ansible.errors import AnsibleParserError, AnsibleAssertionError +from ansible.module_utils._text import to_bytes from ansible.module_utils.six import iteritems, string_types from ansible.parsing.splitter import split_args, parse_kv from ansible.parsing.yaml.objects import AnsibleBaseYAMLObject, AnsibleMapping @@ -29,6 +30,8 @@ from ansible.playbook.attribute import FieldAttribute from ansible.playbook.base import Base from ansible.playbook.conditional import Conditional from ansible.playbook.taggable import Taggable +from ansible.utils.collection_loader import AnsibleCollectionConfig +from ansible.utils.collection_loader._collection_finder import _get_collection_name_from_path, _get_collection_playbook_path from ansible.template import Templar from ansible.utils.display import Display @@ -69,10 +72,29 @@ class PlaybookInclude(Base, Conditional, Taggable): pb = Playbook(loader=loader) file_name = templar.template(new_obj.import_playbook) - if not os.path.isabs(file_name): - file_name = os.path.join(basedir, file_name) - pb._load_playbook_data(file_name=file_name, variable_manager=variable_manager, vars=self.vars.copy()) + # check for FQCN + resource = _get_collection_playbook_path(file_name) + if resource is not None: + playbook = resource[1] + playbook_collection = resource[2] + else: + # not FQCN try path + playbook = file_name + if not os.path.isabs(playbook): + playbook = os.path.join(basedir, playbook) + + # might still be collection playbook + playbook_collection = _get_collection_name_from_path(playbook) + + if playbook_collection: + # it is a collection playbook, setup default collections + AnsibleCollectionConfig.default_collection = playbook_collection + else: + # it is NOT a collection playbook, setup adjecent paths + AnsibleCollectionConfig.playbook_paths.append(os.path.dirname(os.path.abspath(to_bytes(playbook, errors='surrogate_or_strict')))) + + pb._load_playbook_data(file_name=playbook, variable_manager=variable_manager, vars=self.vars.copy()) # finally, update each loaded playbook entry with any variables specified # on the included playbook and/or any tags which may have been set @@ -90,7 +112,7 @@ class PlaybookInclude(Base, Conditional, Taggable): entry.vars = temp_vars entry.tags = list(set(entry.tags).union(new_obj.tags)) if entry._included_path is None: - entry._included_path = os.path.dirname(file_name) + entry._included_path = os.path.dirname(playbook) # Check to see if we need to forward the conditionals on to the included # plays. If so, we can take a shortcut here and simply prepend them to |