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
pull/4420/head
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 parent_include = parent_include._parent
continue continue
if isinstance(parent_include, IncludeRole): if isinstance(parent_include, IncludeRole):
parent_include_dir = os.path.dirname(parent_include._role_path) parent_include_dir = parent_include._role_path
else: else:
parent_include_dir = os.path.dirname(templar.template(parent_include.args.get('_raw_params'))) parent_include_dir = os.path.dirname(templar.template(parent_include.args.get('_raw_params')))
if cumulative_path is None: if cumulative_path is not None and not os.path.isabs(cumulative_path):
cumulative_path = parent_include_dir
elif not os.path.isabs(cumulative_path):
cumulative_path = os.path.join(parent_include_dir, 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']) include_target = templar.template(include_result['include'])
if original_task._role: if original_task._role:
new_basedir = os.path.join(original_task._role._role_path, 'tasks', cumulative_path) 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._from_files = self._from_files.copy()
new_me._parent_role = self._parent_role new_me._parent_role = self._parent_role
new_me._role_name = self._role_name new_me._role_name = self._role_name
new_me._role_path = self._role_path
return new_me return new_me