'Order of notify handlers
I have a task:
- name: uploads docker configuration file
template:
src: 'docker.systemd.j2'
dest: '/etc/systemd/system/docker.service'
notify:
- daemon reload
- restart docker
in Ansible playbook's documentation, there is a sentence:
Notify handlers are always run in the order written.
So, it is expected, that daemon reload will be ran before restart docker, but in logs, i have:
TASK [swarm/docker : uploads docker configuration file] ************************ … NOTIFIED HANDLER daemon reload NOTIFIED HANDLER restart docker … RUNNING HANDLER [swarm/docker : restart docker] ******************************** … RUNNING HANDLER [swarm/docker : daemon reload] ********************************* …
There are no more "NOTIFIED HANDLER" in logs. Can anyone explain, what i'm doing wrong? :(
Solution 1:[1]
I think you may have “restart docker” listed before “daemon reload” in your handlers file.
That part of the ansible documentation is a bit misleading. It means that handlers are executed in the order they are written in the handlers file, not the order they are notified.
This is little more clear in the documentation:
Handlers always run in the order they are defined, not in the order listed in the notify-statement. This is also the case for handlers using listen.
Solution 2:[2]
I just figured out that I can have handlers call other handlers.
Example task:
- name: Configure Apache
copy: src=apache-azkaban.conf dest=/etc/apache2/sites-enabled/azkaban.conf
notify:
- a2enmod proxy
- a2enmod proxy_http
In my handlers/main.yml
:
- name: a2enmod proxy
shell: a2enmod proxy
notify:
- restart apache2
- name: a2enmod proxy_http
shell: a2enmod proxy_http
notify:
- restart apache2
- name: restart apache2
service: name=apache2 state=restarted
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | l0b0 |
Solution 2 |