Properly copy the role path when the IncludeRole object is copied

This exposed some additional errors in logic in IncludeFile, which
had to be fixed to deal with the fact that the role path (unlike paths
from includes) are always absolute paths.

Fixes #27345
This commit is contained in:
James Cammarata 2017-08-03 15:01:36 -05:00 committed by Brian Coca
parent c770d657f3
commit e0b0e61b32
2 changed files with 5 additions and 4 deletions

View file

@ -103,13 +103,13 @@ class IncludedFile:
parent_include = parent_include._parent
continue
if isinstance(parent_include, IncludeRole):
parent_include_dir = os.path.dirname(parent_include._role_path)
parent_include_dir = 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):
if cumulative_path is not None and not os.path.isabs(cumulative_path):
cumulative_path = os.path.join(parent_include_dir, cumulative_path)
else:
cumulative_path = parent_include_dir
include_target = templar.template(include_result['include'])
if original_task._role:
new_basedir = os.path.join(original_task._role._role_path, 'tasks', cumulative_path)

View file

@ -127,6 +127,7 @@ class IncludeRole(TaskInclude):
new_me._from_files = self._from_files.copy()
new_me._parent_role = self._parent_role
new_me._role_name = self._role_name
new_me._role_path = self._role_path
return new_me