Mam Asystenta pod ręką dla wdrażania aplikacji Java jako demona init.d.Sprawdź, czy usługa istnieje z Ansouse
Będąc początkującym zarówno w Ansible, jak i Linux mam problemy z warunkowym wykonywaniem zadań na hoście na podstawie statusu hosta.
Mianowicie mam kilka hostów, które mają już usługę i działają tam, gdzie chcę ją zatrzymać, zanim zrobię cokolwiek innego. A potem mogą istnieć nowe hosty, które nie mają jeszcze usługi. Więc nie mogę po prostu użyć service: name={{service_name}} state=stopped
, ponieważ to nie powiedzie się na nowych hostach.
Jak mogę to osiągnąć? Oto, co mam do tej pory:
- 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
można również użyć' ignore_errors', zwłaszcza z rejestru, w celu det ect to. – tedder42
Tak, uciekłem od ignore_errors, ponieważ bałam się fałszywych negatywów z powodu literówek i innych. Próbuję też przekonać mój zespół do zainwestowania w automatyzację naszego zarządzania konfiguracją i nie chcę, aby pierwsza rzecz, która pokazuje im wyglądała jak jakiś hack. :) Rozwiązanie – EagleBeak
działa również na Ubuntu i prawdopodobnie powinno działać na większości dystrybucji Linuksa. –