在我的许多Ansible角色中,我有一个重新启动服务的处理程序和一个确保服务已启用并启动的任务.当这是第一次运行时,Ansible将启动我的服务(确保mongodb启动并启用),然后在最后运行重启处理程序.我怎么告诉Ansible只启动一次.
样本游戏:
---
- name: Install MongoDB package
yum: name="mongodb-org-{{ mongodb_version }}" state=present
- name: Configure mongodb
template: src=mongod.conf.j2 dest=/etc/{{ mongodb_config_file }} owner=root group=root mode=0644
notify: mongodb restart
- name: Ensure mongodb is started and enabled
service: name={{ mongodb_daemon_name }} state=started enabled=yes
Run Code Online (Sandbox Code Playgroud)
flush_handlers在服务器启动任务的前面插入一个任务以运行重新启动处理程序。喜欢:
- name: flush handlers
meta: flush_handlers
## your service start task
- name: Ensure mongodb is started and enabled
service:
service: name={{ mongodb_daemon_name }} state=started enabled=yes
Run Code Online (Sandbox Code Playgroud)
如果通知处理程序,处理程序将重新启动服务(我假设您有重新启动服务的处理程序)。
如果未通知处理程序,则确保服务已启动任务将启动该服务(如果该服务尚未启动)。
自从我问这个问题以来已经有一段时间了,但是如果有帮助的话,我最终得到的解决方案如下......
诀窍是...
service任务包含在tasks/main.yml带有参数的文件中state: started,并将enabled: yes其拆分为各自的任务Ensure mongodb is started任务register一个mongodb_service_started变量mongodb_service_started中使用新注册的变量仅在任务未更改时运行whenRestart mongodb handlerEnsure mongodb is started这可以确保您的应用程序不会started随后restarted处于同一状态,并防止您的应用程序在启动时运行某些关键功能时被停止。例如数据库迁移。服务启动后立即重新启动可能会导致状态不一致。
任务/main.yml
---
- name: Install MongoDB package
yum:
name: "mongodb-org-{{ mongodb_version }}"
state: present
notify: Restart mongodb
- name: Configure mongodb
template:
src: mongod.conf.j2
dest: "/etc/{{ mongodb_config_file }}"
owner: root
group: root
mode: 0644
notify: Restart mongodb
- name: Ensure mongodb is started
service:
name: "{{ mongodb_daemon_name }}"
state: started
register: mongodb_service_started
- name: Ensure mongodb is enabled
service:
name: "{{ mongodb_daemon_name }}"
enabled: yes
Run Code Online (Sandbox Code Playgroud)
处理程序/main.yml
---
- name: Restart mongodb
service:
name: "{{ mongodb_daemon_name }}"
state: started
when: mongodb_service_started.changed == False
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1935 次 |
| 最近记录: |