diff options
author | James Cammarata <jimi@sngx.net> | 2017-07-10 09:11:51 -0500 |
---|---|---|
committer | James Cammarata <jimi@sngx.net> | 2017-07-10 09:11:51 -0500 |
commit | 49ae3cdd83ad634cd2a3892190b852d7c6cc81a7 (patch) | |
tree | 914de21fa8221a2b21cc41bf8a5d69898307b1d8 | |
parent | 07498ebed3bb7b1505e5ba932ff023f1259fccbe (diff) | |
download | ansible-issue_26525_raw_params_nested_includes.tar.gz |
Don't use _raw_params for IncludeRole objectsissue_26525_raw_params_nested_includes
IncludeRole objects don't use _raw_params for the name/etc. of roles
like regular incudes, but the code for finding relative includes assumed
that all includes had a _raw_params field. This fixes that by correctly
checking the parent object type and using the appropriate field.
Fixes #26525
-rw-r--r-- | lib/ansible/playbook/included_file.py | 6 | ||||
-rw-r--r-- | lib/ansible/playbook/role_include.py | 4 |
2 files changed, 9 insertions, 1 deletions
diff --git a/lib/ansible/playbook/included_file.py b/lib/ansible/playbook/included_file.py index b9f7b3a25d..025e4a4b2e 100644 --- a/lib/ansible/playbook/included_file.py +++ b/lib/ansible/playbook/included_file.py @@ -22,6 +22,7 @@ __metaclass__ = type import os from ansible.playbook.task_include import TaskInclude +from ansible.playbook.role_include import IncludeRole from ansible.template import Templar try: @@ -101,7 +102,10 @@ class IncludedFile: if not isinstance(parent_include, TaskInclude): parent_include = parent_include._parent continue - parent_include_dir = os.path.dirname(templar.template(parent_include.args.get('_raw_params'))) + if isinstance(parent_include, IncludeRole): + parent_include_dir = os.path.dirname(parent_include._role_path) + else: + parent_include_dir = os.path.dirname(templar.template(parent_include.args.get('_raw_params'))) if cumulative_path is None: cumulative_path = parent_include_dir elif not os.path.isabs(cumulative_path): diff --git a/lib/ansible/playbook/role_include.py b/lib/ansible/playbook/role_include.py index bfa6950402..9a2b8a1cb4 100644 --- a/lib/ansible/playbook/role_include.py +++ b/lib/ansible/playbook/role_include.py @@ -58,6 +58,7 @@ class IncludeRole(TaskInclude): self._from_files = {} self._parent_role = role self._role_name = None + self._role_path = None def get_block_list(self, play=None, variable_manager=None, loader=None): @@ -74,6 +75,9 @@ class IncludeRole(TaskInclude): actual_role = Role.load(ri, myplay, parent_role=self._parent_role, from_files=self._from_files) actual_role._metadata.allow_duplicates = self.allow_duplicates + # save this for later use + self._role_path = actual_role._role_path + # compile role with parent roles as dependencies to ensure they inherit # variables if not self._parent_role: |