onk*_*ows 8 ansible ansible-template
我正在使用template模块创建一个 systemd 服务
---
- name: Systemd service
template:
src: sonar.unit.j2
dest: /etc/systemd/system/sonarqube.service
when: "ansible_service_mgr == 'systemd'"
Run Code Online (Sandbox Code Playgroud)
sonarqube.service 的内容当然可以改变。更改时我想重新启动服务。我怎样才能做到这一点?
小智 19
有两种解决方案。
您可以注册template模块输出(随着其状态变化),
register: service_conf
Run Code Online (Sandbox Code Playgroud)
然后使用when子句。
when: service_conf.changed
Run Code Online (Sandbox Code Playgroud)
例如:
---
- name: Systemd service
template:
src: sonar.unit.j2
dest: /etc/systemd/system/sonarqube.service
when: "ansible_service_mgr == 'systemd'"
register: service_conf
- name: restart service
service:
name: sonarqube
state: restarted
when: service_conf.changed
Run Code Online (Sandbox Code Playgroud)
您将重新启动服务任务定义为处理程序。然后在你的template任务中你notify是处理程序。
tasks:
- name: Add Sonarqube to Systemd service
template:
src: sonar.unit.j2
dest: /etc/systemd/system/sonarqube.service
when: "ansible_service_mgr == 'systemd'"
notify: Restart Sonarqube
- …
handlers:
- name: Restart Sonarqube
service:
name: sonarqube
state: restarted
Run Code Online (Sandbox Code Playgroud)
更多信息可以在 Ansible Doc 中找到。
第一种情况,服务会直接重启。在处理程序的情况下,重新启动将在播放结束时发生。
另一个区别是,如果您有几个需要重新启动服务的任务更改,您只需将notify它们添加到所有任务中。
when子句or_1子句_2 or……这需要一个处理程序
---
- name: Testplaybook
hosts: all
handlers:
- name: restart_service
service:
name: <servicename>
state: restarted
tasks:
- template:
src: ...
dest: ...
notify:
- restart_service
Run Code Online (Sandbox Code Playgroud)
当某些事情发生变化时,处理程序将自动得到模块的通知。有关处理程序的更多信息,请参阅文档。
| 归档时间: |
|
| 查看次数: |
15283 次 |
| 最近记录: |