summaryrefslogtreecommitdiff
path: root/lib/ansible/playbook/helpers.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ansible/playbook/helpers.py')
-rw-r--r--lib/ansible/playbook/helpers.py33
1 files changed, 23 insertions, 10 deletions
diff --git a/lib/ansible/playbook/helpers.py b/lib/ansible/playbook/helpers.py
index 4d14076643..c19db72894 100644
--- a/lib/ansible/playbook/helpers.py
+++ b/lib/ansible/playbook/helpers.py
@@ -46,9 +46,9 @@ def load_list_of_blocks(ds, play, parent_block=None, role=None, task_include=Non
block_list = []
if ds:
- for block in ds:
+ for block_ds in ds:
b = Block.load(
- block,
+ block_ds,
play=play,
parent_block=parent_block,
role=role,
@@ -96,7 +96,7 @@ def load_list_of_tasks(ds, play, block=None, role=None, task_include=None, use_h
play=play,
parent_block=block,
role=role,
- task_include=None,
+ task_include=task_include,
use_handlers=use_handlers,
variable_manager=variable_manager,
loader=loader,
@@ -105,9 +105,19 @@ def load_list_of_tasks(ds, play, block=None, role=None, task_include=None, use_h
else:
if 'include' in task_ds:
if use_handlers:
- t = HandlerTaskInclude.load(task_ds, block=block, role=role, task_include=task_include, variable_manager=variable_manager, loader=loader)
+ include_class = HandlerTaskInclude
else:
- t = TaskInclude.load(task_ds, block=block, role=role, task_include=task_include, variable_manager=variable_manager, loader=loader)
+ include_class = TaskInclude
+
+ t = include_class.load(
+ task_ds,
+ block=block,
+ role=role,
+ task_include=None,
+ variable_manager=variable_manager,
+ loader=loader
+ )
+
all_vars = variable_manager.get_vars(loader=loader, play=play, task=t)
templar = Templar(loader=loader, variables=all_vars)
@@ -134,6 +144,9 @@ def load_list_of_tasks(ds, play, block=None, role=None, task_include=None, use_h
parent_include = task_include
cumulative_path = None
while parent_include is not None:
+ if not isinstance(parent_include, TaskInclude):
+ parent_include = parent_include._parent
+ continue
parent_include_dir = templar.template(os.path.dirname(parent_include.args.get('_raw_params')))
if cumulative_path is None:
cumulative_path = parent_include_dir
@@ -149,7 +162,7 @@ def load_list_of_tasks(ds, play, block=None, role=None, task_include=None, use_h
if os.path.exists(include_file):
break
else:
- parent_include = parent_include._task_include
+ parent_include = parent_include._parent
else:
try:
include_target = templar.template(t.args['_raw_params'])
@@ -195,8 +208,8 @@ def load_list_of_tasks(ds, play, block=None, role=None, task_include=None, use_h
included_blocks = load_list_of_blocks(
data,
play=play,
- parent_block=block,
- task_include=t,
+ parent_block=None,
+ task_include=t.copy(),
role=role,
use_handlers=use_handlers,
loader=loader,
@@ -213,8 +226,8 @@ def load_list_of_tasks(ds, play, block=None, role=None, task_include=None, use_h
if len(tags) > 0:
if len(t.tags) > 0:
raise AnsibleParserError(
- "Include tasks should not specify tags in more than one way (both via args and directly on the task)." \
- " Mixing tag specify styles is prohibited for whole import hierarchy, not only for single import statement",
+ "Include tasks should not specify tags in more than one way (both via args and directly on the task). " \
+ "Mixing styles in which tags are specified is prohibited for whole import hierarchy, not only for single import statement",
obj=task_ds,
suppress_extended_error=True,
)