通知处理程序的顺序

时间:2016-02-01 12:02:04

标签: ansible

我有一个任务:

- name: uploads docker configuration file
  template:
    src: 'docker.systemd.j2'
    dest: '/etc/systemd/system/docker.service'
  notify:
    - daemon reload
    - restart docker

在Ansible playbook' documentation中,有一句话:

  

通知处理程序始终按写入的顺序运行。

因此,预计守护程序重新加载将在重新启动docker 之前运行,但在日志中,我有:

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] *********************************
…

没有更多" NOTIFIED HANDLER"在日志中。谁能解释一下,我做错了什么? :(

2 个答案:

答案 0 :(得分:38)

我认为您可能在处理程序文件中的“守护程序重新加载”之前列出了“重新启动docker”。

ansible文档的那部分有点误导。这意味着处理程序按照处理程序文件中的顺序执行,而不是通知它们的顺序。

the glossary

中的情况稍微清楚一点

答案 1 :(得分:2)

我发现我可以让处理程序调用其他处理程序。

示例任务:

- name: Configure Apache
  copy: src=apache-azkaban.conf dest=/etc/apache2/sites-enabled/azkaban.conf
  notify:
   - a2enmod proxy
   - a2enmod proxy_http

在我的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