使用Ansible安装ntp,
我通知处理程序以启动ntpd服务:
任务:
---
# roles/common/tasks/ntp.yml
- name: ntp | installing
yum: name=ntp state=latest
notify: start ntp
处理程序:
---
# roles/common/handlers/main.yml
- name: start ntp
service: name=ntpd state=started
如果尚未安装服务,则安装并启动它
如果服务已经安装但未运行,则不会通知处理程序:
任务状态为changed: false
这意味着,如果它已经在操作系统中显示,我就无法启动它。
有没有什么好的做法可以帮助确保服务已经安装并且处于运行状态?
PS:我可以这样做:
---
# roles/common/tasks/ntp.yml
- name: ntp | installing
yum: name=ntp state=latest
notify: start ntp
changed: true
但我不确定这是不错的做法。
答案 0 :(得分:8)
正如我们所提到的,模块被编写为“幂等”,并且可以在远程系统上进行更改时进行中继。 Playbooks认识到这一点并拥有一个可用于响应变化的基本事件系统。
这些“通知”操作在剧本中每个任务块结束时触发,即使被多个不同任务通知也只会触发一次。
处理程序仅在设计更改时运行。如果您更改配置,则通常需要重新启动服务,但如果没有任何更改,则不要这样做。
如果服务尚未运行,您需要的是启动服务。为此,您应该使用@udondan所描述的常规任务:
- name: ntp | installing
yum:
name: ntp
state: latest
- name: ntp | starting
service:
name: ntpd
state: started
enabled: yes
Ansible在设计上是幂等的,所以第二个任务只有在ntp尚未运行时才会运行。 enabled
行会将服务设置为在启动时启动。如果不是所希望的行为,请删除此行。
答案 1 :(得分:4)
为什么不添加服务任务呢?处理程序通常用于在配置更改后重新启动服务。为确保服务运行无关紧要,只需添加以下任务:
- name: Ensure ntp is running
service:
name: ntpd
state: started