通知处理程序的顺序

arz*_*ezy 17 ansible

我有一个任务:

- name: uploads docker configuration file
  template:
    src: 'docker.systemd.j2'
    dest: '/etc/systemd/system/docker.service'
  notify:
    - daemon reload
    - restart docker
Run Code Online (Sandbox Code Playgroud)

在Ansible playbook的文档中,有一句话:

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

因此,预计会在重启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".谁能解释一下,我做错了什么?:(

小智 43

我想你可能在你的处理程序文件中的"daemon reload"之前列出了"重启docker".

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

这在词汇表中更为明显

  • 那是血腥的意外 (25认同)

dan*_*man 6

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

示例任务:

- name: Configure Apache
  copy: src=apache-azkaban.conf dest=/etc/apache2/sites-enabled/azkaban.conf
  notify:
   - a2enmod proxy
   - a2enmod proxy_http
Run Code Online (Sandbox Code Playgroud)

在我的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
Run Code Online (Sandbox Code Playgroud)