Ansible处理程序仅在发生更改时运行:true
使用Ansible安装ntp, 我通知处理程序以启动ntpd服务: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 这意味着,如果它已经出现在操作系统中,我就无法启动它 是否有任何好的实践可以帮助确保服务已经安装并且处于运
任务: 处理程序:
---
# 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