Do not allow addressing an import from handlers via notify. Fixes #48936 (#49317)

This commit is contained in:
Matt Martz 2018-11-29 13:50:07 -06:00 committed by GitHub
parent 7f04ee1eb4
commit 77befcf5d7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 34 additions and 1 deletions

View file

@ -0,0 +1,4 @@
bugfixes:
- imports - Prevent the name of an import from being addressable as a handler, only the tasks within should
be addressable. Use an include instead of an import if you need to execute many tasks from a single handler
(https://github.com/ansible/ansible/issues/48936)

View file

@ -402,7 +402,7 @@ class StrategyBase:
def parent_handler_match(target_handler, handler_name): def parent_handler_match(target_handler, handler_name):
if target_handler: if target_handler:
if isinstance(target_handler, (TaskInclude, IncludeRole)): if isinstance(target_handler, (TaskInclude, IncludeRole)) and not getattr(target_handler, 'statically_loaded', True):
try: try:
handler_vars = self._variable_manager.get_vars(play=iterator._play, task=target_handler) handler_vars = self._variable_manager.get_vars(play=iterator._play, task=target_handler)
templar = Templar(loader=self._loader, variables=handler_vars) templar = Templar(loader=self._loader, variables=handler_vars)

View file

@ -0,0 +1,11 @@
- hosts: localhost
gather_facts: false
tasks:
- import_role:
name: include_handler_test
- hosts: localhost
gather_facts: false
tasks:
- import_role:
name: import_handler_test

View file

@ -0,0 +1,2 @@
- name: do_import
import_tasks: tasks/handlers.yml

View file

@ -0,0 +1,2 @@
- debug:
msg: import handler task

View file

@ -0,0 +1,3 @@
- command: "true"
notify:
- do_import

View file

@ -0,0 +1,2 @@
- name: do_include
include_tasks: tasks/handlers.yml

View file

@ -0,0 +1,2 @@
- debug:
msg: include handler task

View file

@ -0,0 +1,3 @@
- command: "true"
notify:
- do_include

View file

@ -86,3 +86,7 @@ ansible-playbook public_exposure/no_overwrite_roles.yml -i ../../inventory "$@"
# https://github.com/ansible/ansible/pull/48068 # https://github.com/ansible/ansible/pull/48068
ansible-playbook run_once/playbook.yml "$@" ansible-playbook run_once/playbook.yml "$@"
# https://github.com/ansible/ansible/issues/48936
ansible-playbook -v handler_addressing/playbook.yml 2>&1 | tee test_handler_addressing.out
test "$(egrep -c 'include handler task|ERROR! The requested handler '"'"'do_import'"'"' was not found' test_handler_addressing.out)" = 2