diff options
Diffstat (limited to 'lib/ansible/playbook/helpers.py')
-rw-r--r-- | lib/ansible/playbook/helpers.py | 33 |
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, ) |