У меня есть Ansible playbook для развертывания Java-приложения в качестве демона init.d.
Будучи новичком в Ansible и Linux, у меня возникли проблемы с условным выполнением задач на хосте на основе состояния хоста.
А именно, у меня есть несколько хостов, у которых уже есть и работает служба, где я хочу остановить ее, прежде чем делать что-либо еще. И тогда могут появиться новые хосты, у которых пока нет сервиса. Поэтому я не могу просто использовать service: name={{service_name}} state=stopped
, потому что это не удастся на новых хостах.
Как я могу это достичь? Вот что я до сих пор:
- 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