Verifique si el servicio existe con Ansible
Tengo un libro de jugadas Ansible para implementar una aplicación Java como un demonio init.d.
Al ser un principiante tanto en Ansible como en Linux, tengo problemas para ejecutar condicionalmente tareas en un host según el estado del host.
Es decir, tengo algunos hosts que ya tienen el servicio presente y ejecutándose donde quiero detenerlo antes de hacer cualquier otra cosa. Y luego puede haber nuevos hosts, que aún no tienen el servicio. Entonces no puedo simplemente usarservice: name={{service_name}} state=stopped
, porque esto fallará en los nuevos hosts.
¿Cómo puedo lograr esto? Esto es lo que tengo hasta ahora:
- name: Check if Service Exists
shell: "if chkconfig --list | grep -q my_service; then echo true; else echo false; fi;"
register: service_exists
# This should only execute on hosts where the service is present
- name: Stop Service
service: name={{service_name}} state=stopped
when: service_exists
register: service_stopped
# This too
- name: Remove Old App Folder
command: rm -rf {{app_target_folder}}
when: service_exists
# This should be executed on all hosts, but only after the service has stopped, if it was present
- name: Unpack App Archive
unarchive: src=../target/{{app_tar_name}} dest=/opt