mirror of https://github.com/ansible/ansible.git
Fix notifying handlers by using an exact match (#55624)
* Fix notifying handlers by using an exact match rather than a string subset if listen is text rather than a list
* Enforce better type checking for listeners
* Share code for validating handler listeners
* Add test for handlers without names
* Add test for templating in handlers
* Add test for include_role
* Add a couple notes about 'listen' for handlers
* changelog
(cherry picked from commit ec1287ca7e)
pull/58512/head
parent
8cc128b8f5
commit
cb70656c99
@ -0,0 +1,3 @@
|
|||||||
|
bugfixes:
|
||||||
|
- handlers - Only notify a handler if the handler is an exact match by ensuring `listen` is a list of strings.
|
||||||
|
(https://github.com/ansible/ansible/issues/55575)
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
- name: name1
|
||||||
|
set_fact:
|
||||||
|
role_non_templated_name: True
|
||||||
|
- name: "{{ handler2 }}"
|
||||||
|
set_fact:
|
||||||
|
role_templated_name: True
|
||||||
|
- name: testlistener1
|
||||||
|
set_fact:
|
||||||
|
role_non_templated_listener: True
|
||||||
|
listen: name3
|
||||||
|
- name: testlistener2
|
||||||
|
set_fact:
|
||||||
|
role_templated_listener: True
|
||||||
|
listen: "{{ handler4 }}"
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
- command: echo Hello World
|
||||||
|
notify:
|
||||||
|
- "{{ handler1 }}"
|
||||||
|
- "{{ handler2 }}"
|
||||||
|
- "{{ handler3 }}"
|
||||||
|
- "{{ handler4 }}"
|
||||||
|
|
||||||
|
- meta: flush_handlers
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- role_non_templated_name is defined
|
||||||
|
- role_templated_name is defined
|
||||||
|
- role_non_templated_listener is defined
|
||||||
|
- role_templated_listener is undefined
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
- name: test templated values in handlers
|
||||||
|
hosts: localhost
|
||||||
|
gather_facts: no
|
||||||
|
vars:
|
||||||
|
handler1: name1
|
||||||
|
handler2: name2
|
||||||
|
handler3: name3
|
||||||
|
handler4: name4
|
||||||
|
|
||||||
|
handlers:
|
||||||
|
- name: name1
|
||||||
|
set_fact:
|
||||||
|
non_templated_name: True
|
||||||
|
- name: "{{ handler2 }}"
|
||||||
|
set_fact:
|
||||||
|
templated_name: True
|
||||||
|
- name: testlistener1
|
||||||
|
set_fact:
|
||||||
|
non_templated_listener: True
|
||||||
|
listen: name3
|
||||||
|
- name: testlistener2
|
||||||
|
set_fact:
|
||||||
|
templated_listener: True
|
||||||
|
listen: "{{ handler4 }}"
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- command: echo Hello World
|
||||||
|
notify:
|
||||||
|
- "{{ handler1 }}"
|
||||||
|
- "{{ handler2 }}"
|
||||||
|
- "{{ handler3 }}"
|
||||||
|
- "{{ handler4 }}"
|
||||||
|
|
||||||
|
- meta: flush_handlers
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- non_templated_name is defined
|
||||||
|
- templated_name is defined
|
||||||
|
- non_templated_listener is defined
|
||||||
|
- templated_listener is undefined
|
||||||
|
|
||||||
|
- include_role: name=test_templating_in_handlers
|
||||||
Loading…
Reference in New Issue