Ansible处理程序仅在发生更改时运行:true

Ansible处理程序仅在发生更改时运行:true,ansible,ansible-playbook,Ansible,Ansible Playbook,使用Ansible安装ntp, 我通知处理程序以启动ntpd服务: 任务: 处理程序: --- # roles/common/handlers/main.yml - name: start ntp service: name=ntpd state=started 如果服务尚未安装,ansible将安装并启动它。 如果服务已安装但未运行,则不会通知处理程序:任务状态已更改:false 这意味着,如果它已经出现在操作系统中,我就无法启动它 是否有任何好的实践可以帮助确保服务已经安装并且处于运

使用Ansible安装ntp, 我通知处理程序以启动ntpd服务:
任务:

处理程序:

---
# roles/common/handlers/main.yml

- name: start ntp
  service: name=ntpd state=started
如果服务尚未安装,ansible将安装并启动它。
如果服务已安装但未运行,则不会通知处理程序:
任务状态已更改:false
这意味着,如果它已经出现在操作系统中,我就无法启动它

是否有任何好的实践可以帮助确保服务已经安装并且处于运行状态

附:我可以这样做:

---
# roles/common/tasks/ntp.yml
  - name: ntp | installing
    yum: name=ntp state=latest
    notify: start ntp
    changed: true

但是我不确定这是否是一种好的做法。

那么为什么不添加一个服务任务呢?处理程序通常用于在配置更改后重新启动服务。要确保服务运行,不管发生什么,只需在任务中添加如下内容:

- name: Ensure ntp is running
  service:
    name: ntpd
    state: started
从:

正如我们所提到的,模块被写为“幂等”,当它们在远程系统上进行更改时,可以进行中继。剧本认识到这一点,并有一个基本的事件系统,可用于响应变化

这些“通知”操作在剧本中的每个任务块结束时触发,并且即使由多个不同的任务通知,也只会触发一次

处理程序仅在设计更改时运行。如果更改配置,通常需要重新启动服务,但如果没有任何更改,则不希望重新启动

如果服务尚未运行,则需要启动该服务。为此,应使用@udondan所述的常规任务:

- name: ntp | installing
  yum:
    name: ntp
    state: latest

- name: ntp | starting
  service:
    name: ntpd
    state: started
    enabled: yes
Ansible在设计上是幂等的,所以第二个任务将仅在ntp尚未运行时运行。
enabled
行将服务设置为启动时启动。如果这不是所需的行为,请删除此行

- name: ntp | installing
  yum:
    name: ntp
    state: latest

- name: ntp | starting
  service:
    name: ntpd
    state: started
    enabled: yes