Fix calling v2_playbook_on_notify callback (#80585)

Co-authored-by: Matt Martz <matt@sivel.net>
pull/80615/head
Martin Krizek 2 years ago committed by GitHub
parent f4615d69ad
commit 989a7d6951
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,2 @@
bugfixes:
- "handlers - fix ``v2_playbook_on_notify`` callback not being called when notifying handlers"

@ -947,7 +947,7 @@ class StrategyBase:
# actually notify proper handlers based on all notifications up to this point
for notification in list(host_state.handler_notifications):
for handler in self.search_handlers_by_notification(notification, iterator):
if not handler.notify_host(target_host):
if handler.notify_host(target_host):
# NOTE even with notifications deduplicated this can still happen in case of handlers being
# notified multiple times using different names, like role name or fqcn
self._tqm.send_callback('v2_playbook_on_notify', handler, target_host)

@ -0,0 +1,4 @@
shippable/posix/group3
context/controller
needs/target/setup_remote_tmp_dir
needs/target/support-callback_plugins

@ -0,0 +1,123 @@
- hosts: localhost
gather_facts: false
vars_prompt:
name: vars_prompt_var
default: hamsandwich
handlers:
- name: handler1
debug:
msg: handler1
- debug:
msg: listen1
listen:
- listen1
roles:
- setup_remote_tmp_dir
tasks:
- name: ok
debug:
msg: ok
- name: changed
debug:
msg: changed
changed_when: true
- name: skipped
debug:
msg: skipped
when: false
- name: failed
debug:
msg: failed
failed_when: true
ignore_errors: true
- name: unreachable
ping:
delegate_to: example.org
ignore_unreachable: true
vars:
ansible_timeout: 1
- name: loop
debug:
ignore_errors: true
changed_when: '{{ item.changed }}'
failed_when: '{{ item.failed }}'
when: '{{ item.when }}'
loop:
# ok
- changed: false
failed: false
when: true
# changed
- changed: true
failed: false
when: true
# failed
- changed: false
failed: true
when: true
# skipped
- changed: false
failed: false
when: false
- name: notify handler1
debug:
msg: notify handler1
changed_when: true
notify:
- handler1
- name: notify listen1
debug:
msg: notify listen1
changed_when: true
notify:
- listen1
- name: retry ok
debug:
register: result
until: result.attempts == 2
retries: 1
delay: 0
- name: retry failed
debug:
register: result
until: result.attempts == 3
retries: 1
delay: 0
ignore_errors: true
- name: async poll ok
command: sleep 2
async: 3
poll: 1
- name: async poll failed
shell: sleep 2; false
async: 3
poll: 1
ignore_errors: true
- include_tasks: include_me.yml
- name: diff
copy:
content: diff
dest: '{{ remote_tmp_dir.path }}/diff.txt'
diff: true
- hosts: i_dont_exist
- hosts: localhost
gather_facts: false
max_fail_percentage: 0
tasks:
- fail:

@ -0,0 +1,22 @@
1 __init__
83 v2_on_any
4 v2_playbook_on_handler_task_start
2 v2_playbook_on_include
3 v2_playbook_on_notify
1 v2_playbook_on_play_start
1 v2_playbook_on_start
1 v2_playbook_on_stats
17 v2_playbook_on_task_start
1 v2_playbook_on_vars_prompt
1 v2_runner_item_on_failed
2 v2_runner_item_on_ok
1 v2_runner_item_on_skipped
1 v2_runner_on_async_failed
1 v2_runner_on_async_ok
2 v2_runner_on_async_poll
5 v2_runner_on_failed
15 v2_runner_on_ok
1 v2_runner_on_skipped
21 v2_runner_on_start
1 v2_runner_on_unreachable
2 v2_runner_retry

@ -0,0 +1,11 @@
#!/usr/bin/env bash
set -eux
export ANSIBLE_CALLBACK_PLUGINS=../support-callback_plugins/callback_plugins
export ANSIBLE_ROLES_PATH=../
export ANSIBLE_STDOUT_CALLBACK=callback_debug
ansible-playbook all-callbacks.yml 2>/dev/null | sort | uniq -c | tee callbacks_list.out
diff -w callbacks_list.out callbacks_list.expected

@ -1,2 +1,3 @@
shippable/posix/group3
context/controller
needs/target/support-callback_plugins

@ -34,7 +34,7 @@ ansible localhost -m debug -a var=playbook_dir --playbook-dir=/doesnotexist/tmp
env -u ANSIBLE_PLAYBOOK_DIR ANSIBLE_CONFIG=./playbookdir_cfg.ini ansible localhost -m debug -a var=playbook_dir | grep '"playbook_dir": "/doesnotexist/tmp"'
# test adhoc callback triggers
ANSIBLE_STDOUT_CALLBACK=callback_debug ANSIBLE_LOAD_CALLBACK_PLUGINS=1 ansible --playbook-dir . testhost -i ../../inventory -m ping | grep -E '^v2_' | diff -u adhoc-callback.stdout -
ANSIBLE_CALLBACK_PLUGINS=../support-callback_plugins/callback_plugins ANSIBLE_STDOUT_CALLBACK=callback_debug ANSIBLE_LOAD_CALLBACK_PLUGINS=1 ansible --playbook-dir . testhost -i ../../inventory -m ping | grep -E '^v2_' | diff -u adhoc-callback.stdout -
# CB_WANTS_IMPLICIT isn't anything in Ansible itself.
# Our test cb plugin just accepts it. It lets us avoid copypasting the whole

Loading…
Cancel
Save