Order of notify handlers

2019-06-14 23:57发布

问题:

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? :(

回答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 glossary



回答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


标签: ansible