O módulo service:
do Ansible não fornece um mecanismo para verificar se um serviço já está em execução ou não. Portanto, você terá que recorrer ao uso de algo assim por meio do módulo shell:
para determinar primeiro se o serviço está sendo executado.
Exemplo
Aqui estou detectando se o WebSphere ou o Tomcat8 está em execução e, em seguida, reinicie o serviço apropriado com base em seu status.
---
# handles tomcat8
- name: is tomcat8 already running?
shell: service tomcat8 status warn=false
register: _svc_tomcat8
failed_when: _svc_tomcat8.rc != 0 and ("unrecognized service" not in _svc_tomcat8.stderr)
ignore_errors: true
- name: restart tomcat8 if running
service: name=tomcat8 state=restarted
when: "_svc_tomcat8.rc == 0"
# handles WAS
- name: is WebSphere already running?
shell: service Node01_was.init status warn=false
register: _svc_websphere
failed_when: _svc_websphere.rc != 0 and ("unrecognized service" not in _svc_websphere.stderr)
ignore_errors: true
- name: restart WebSphere if running
service: name=Node01_was.init state=restarted
when: "_svc_websphere.rc == 0"
# vim:ft=ansible:
Para invocar somente a reinicialização se um arquivo específico foi atualizado, você pode usar uma register:
nas tarefas copy:
ou template:
para salvar o estado de atualização do arquivo. Os resultados desse register:
podem ser incorporados como parte da tarefa when:
na tarefa service: name=XXXX state=restarted
.