diff --git a/changelogs/fragments/80459-handlers-nested-includes-vars.yml b/changelogs/fragments/80459-handlers-nested-includes-vars.yml new file mode 100644 index 00000000000000..2aedfd43e2ef02 --- /dev/null +++ b/changelogs/fragments/80459-handlers-nested-includes-vars.yml @@ -0,0 +1,2 @@ +bugfixes: + - include_role - expose variables from parent roles to role's handlers (https://github.com/ansible/ansible/issues/80459) diff --git a/lib/ansible/playbook/role_include.py b/lib/ansible/playbook/role_include.py index 155c123c7e0161..bb3141fbae713f 100644 --- a/lib/ansible/playbook/role_include.py +++ b/lib/ansible/playbook/role_include.py @@ -113,7 +113,7 @@ def get_block_list(self, play=None, variable_manager=None, loader=None): b.collections = actual_role.collections # updated available handlers in play - handlers = actual_role.get_handler_blocks(play=myplay) + handlers = actual_role.get_handler_blocks(play=myplay, dep_chain=dep_chain) for h in handlers: h._parent = p_block myplay.handlers = myplay.handlers + handlers diff --git a/test/integration/targets/handlers/roles/r1-dep_chain-vars/defaults/main.yml b/test/integration/targets/handlers/roles/r1-dep_chain-vars/defaults/main.yml new file mode 100644 index 00000000000000..555ff0e9857a53 --- /dev/null +++ b/test/integration/targets/handlers/roles/r1-dep_chain-vars/defaults/main.yml @@ -0,0 +1 @@ +v: foo diff --git a/test/integration/targets/handlers/roles/r1-dep_chain-vars/tasks/main.yml b/test/integration/targets/handlers/roles/r1-dep_chain-vars/tasks/main.yml new file mode 100644 index 00000000000000..72576a01ee6171 --- /dev/null +++ b/test/integration/targets/handlers/roles/r1-dep_chain-vars/tasks/main.yml @@ -0,0 +1,2 @@ +- include_role: + name: r2-dep_chain-vars diff --git a/test/integration/targets/handlers/roles/r2-dep_chain-vars/handlers/main.yml b/test/integration/targets/handlers/roles/r2-dep_chain-vars/handlers/main.yml new file mode 100644 index 00000000000000..88f1248f802397 --- /dev/null +++ b/test/integration/targets/handlers/roles/r2-dep_chain-vars/handlers/main.yml @@ -0,0 +1,4 @@ +- name: h + assert: + that: + - v is defined diff --git a/test/integration/targets/handlers/roles/r2-dep_chain-vars/tasks/main.yml b/test/integration/targets/handlers/roles/r2-dep_chain-vars/tasks/main.yml new file mode 100644 index 00000000000000..72eae5d6fea1ef --- /dev/null +++ b/test/integration/targets/handlers/roles/r2-dep_chain-vars/tasks/main.yml @@ -0,0 +1,2 @@ +- command: echo + notify: h diff --git a/test/integration/targets/handlers/runme.sh b/test/integration/targets/handlers/runme.sh index 83e3d4c0de52aa..be4aecb2ce062d 100755 --- a/test/integration/targets/handlers/runme.sh +++ b/test/integration/targets/handlers/runme.sh @@ -190,3 +190,5 @@ ansible-playbook test_include_role_handler_once.yml -i inventory.handlers "$@" 2 ansible-playbook test_listen_role_dedup.yml "$@" 2>&1 | tee out.txt [ "$(grep out.txt -ce 'a handler from a role')" = "1" ] + +ansible localhost -m include_role -a "name=r1-dep_chain-vars" "$@"