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