Ho una cartella di gioco Ansible per la distribuzione di un'app Java come un demone init.d.Verificare se il servizio esiste con Ansible
Essendo un principiante sia in Ansible che in Linux, ho problemi a eseguire in modo condizionale le attività su un host in base allo stato dell'host.
Vale a dire che alcuni host hanno il servizio già presente e in esecuzione dove voglio fermarlo prima di fare qualsiasi altra cosa. E poi potrebbero esserci nuovi host, che non hanno ancora il servizio. Quindi non posso semplicemente usare service: name={{service_name}} state=stopped
, perché questo non funzionerà sui nuovi host.
Come posso ottenere questo risultato? Ecco quello che ho finora:
- 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
si può anche usare' ignore_errors', in particolare con il registro, a det ect questo. – tedder42
Sì, ho evitato ignore_errors, perché avevo paura dei falsi negativi dovuti a errori di battitura e simili. Inoltre sto cercando di convincere il mio team di investire nell'automazione della nostra gestione della configurazione e non voglio che la prima cosa mostri loro l'aspetto di una sorta di hack. :) La soluzione – EagleBeak
funziona anche su Ubuntu e probabilmente dovrebbe funzionare sulla maggior parte delle distro di Linux. –