Fix exception when including tasks from handlers (#47307)

Set _notified_handlers for the task's _uuid that is run as a handler

Fix #47287
This commit is contained in:
Pablo 2018-10-22 17:46:36 +02:00 committed by Matt Martz
parent 335a979f1d
commit 6497049f2a
4 changed files with 25 additions and 1 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- "handlers - fix crash when handler task include tasks"

View file

@ -952,9 +952,12 @@ class StrategyBase:
iterator._play.handlers.append(block) iterator._play.handlers.append(block)
iterator.cache_block_tasks(block) iterator.cache_block_tasks(block)
for task in block.block: for task in block.block:
task_name = task.get_name()
display.debug("adding task '%s' included in handler '%s'" % (task_name, handler_name))
self._notified_handlers[task._uuid] = included_file._hosts[:]
result = self._do_handler_run( result = self._do_handler_run(
handler=task, handler=task,
handler_name=task.get_name(), handler_name=task_name,
iterator=iterator, iterator=iterator,
play_context=play_context, play_context=play_context,
notified_hosts=included_file._hosts[:], notified_hosts=included_file._hosts[:],

View file

@ -63,3 +63,6 @@ set +e
result="$(ansible-playbook test_handlers_any_errors_fatal.yml -e output_dir=$output_dir -i inventory.handlers -v "$@" 2>&1)" result="$(ansible-playbook test_handlers_any_errors_fatal.yml -e output_dir=$output_dir -i inventory.handlers -v "$@" 2>&1)"
set -e set -e
[ ! -f $output_dir/should_not_exist_B ] || (rm -f $output_dir/should_not_exist_B && exit 1) [ ! -f $output_dir/should_not_exist_B ] || (rm -f $output_dir/should_not_exist_B && exit 1)
# https://github.com/ansible/ansible/issues/47287
[ "$(ansible-playbook test_handlers_including_task.yml -i ../../inventory -v "$@" | egrep -o 'failed=[0-9]+')" = "failed=0" ]

View file

@ -0,0 +1,16 @@
---
- name: Verify handler can include other tasks (#47287)
hosts: testhost
tasks:
- name: include a task from the tasks section
include_tasks: handlers.yml
- name: notify a handler
debug:
msg: notifying handler
changed_when: yes
notify: include a task from the handlers section
handlers:
- name: include a task from the handlers section
include_tasks: handlers.yml