FIX: multiple nested tasks include levels (#35165)

* Test for include_tasks & include_role bug

Related to ansible/ansible:#21890

* Fix nested include_tasks called from role

This fixes the path of included files when you want
to call include_task inside a role's task file and this
role is itself called from multiple level of playbook include_tasks

Related to ansible/ansible:#21890
This fixes ansible/ansible:#35109
This commit is contained in:
kiorky 2018-01-31 14:35:06 +01:00 committed by James Cammarata
parent 984edacd2a
commit 9001a8794f
28 changed files with 77 additions and 1 deletions

View file

@ -109,7 +109,16 @@ class IncludedFile:
include_target = templar.template(include_result['include'])
if original_task._role:
new_basedir = os.path.join(original_task._role._role_path, 'tasks', cumulative_path)
include_file = loader.path_dwim_relative(new_basedir, 'tasks', include_target)
candidates = [loader.path_dwim_relative(original_task._role._role_path, 'tasks', include_target),
loader.path_dwim_relative(new_basedir, 'tasks', include_target)]
for include_file in candidates:
try:
# may throw OSError
os.stat(include_file)
# or select the task file if it exists
break
except OSError:
pass
else:
include_file = loader.path_dwim_relative(loader.get_basedir(), cumulative_path, include_target)

View file

@ -0,0 +1,6 @@
- name: >-
verify that multiple level of nested statements and
include+meta doesnt mess included files mecanisms
hosts: testhost
tasks:
- include_tasks: ./tasks/nested/nested.yml

View file

@ -0,0 +1,2 @@
---
- include_role: {name: nested_include_task}

View file

@ -0,0 +1,3 @@
---
testnesteddep2_defvar1: foobar
testnesteddep2_varvar1: foobar

View file

@ -0,0 +1,2 @@
dependencies:
- role: nested/nested/nested_dep_role2a

View file

@ -0,0 +1,2 @@
---
- include_tasks: ./rund.yml

View file

@ -0,0 +1,2 @@
---
- shell: echo from deprole2a

View file

@ -0,0 +1,2 @@
---
testnesteddep2_varvar1: muche

View file

@ -0,0 +1,3 @@
---
testnesteddep2_defvar1: foobar
testnesteddep2_varvar1: foobar

View file

@ -0,0 +1,2 @@
dependencies:
- role: nested/nested/nested_dep_role2b

View file

@ -0,0 +1,2 @@
---
- include_tasks: ./rune.yml

View file

@ -0,0 +1,2 @@
---
- shell: echo from deprole2

View file

@ -0,0 +1,2 @@
---
testnesteddep2_varvar1: muche

View file

@ -0,0 +1,3 @@
---
testnesteddep2_defvar1: foobar
testnesteddep2_varvar1: foobar

View file

@ -0,0 +1,2 @@
---
- include_tasks: ./runf.yml

View file

@ -0,0 +1,2 @@
---
- shell: echo from deprole2b

View file

@ -0,0 +1,2 @@
---
testnesteddep2_varvar1: muche

View file

@ -0,0 +1,3 @@
---
testnesteddep_defvar1: foobar
testnesteddep_varvar1: foobar

View file

@ -0,0 +1,2 @@
---
dependencies: []

View file

@ -0,0 +1,2 @@
---
- include_tasks: ./runc.yml

View file

@ -0,0 +1,4 @@
---
- debug:
msg: from test_nested_dep_role
- include_role: {name: nested/nested/nested_dep_role2}

View file

@ -0,0 +1,2 @@
---
testnesteddep_varvar1: muche

View file

@ -0,0 +1,2 @@
dependencies:
- role: nested/nested_dep_role

View file

@ -0,0 +1,2 @@
---
- include_tasks: ./runa.yml

View file

@ -0,0 +1,3 @@
---
- debug:
msg: from nested_include_task

View file

@ -36,3 +36,8 @@ ANSIBLE_STRATEGY='free' ansible-playbook role/test_include_role.yml -i ../../inv
## Recursion
# https://github.com/ansible/ansible/issues/23609
ANSIBLE_STRATEGY='linear' ansible-playbook test_recursion.yml -i ../../inventory "$@" --skip-tags never
## Nested tasks
# https://github.com/ansible/ansible/issues/34782
ANSIBLE_STRATEGY='linear' ansible-playbook nested.yml -i ../../inventory "$@" --skip-tags never
ANSIBLE_STRATEGY='free' ansible-playbook nested.yml -i ../../inventory "$@" --skip-tags never

View file

@ -0,0 +1,2 @@
---
- include_tasks: ../../nestedtasks/nested/nested.yml