Korzystam z Ansible, aby udostępnić mój serwer programistyczny.
Chcę, żeby zawsze uruchamiało dla mnie niektóre usługi. Mam w tym celu moduły obsługi, ale jaki jest najlepszy sposób na wywołanie procedury obsługi bez warunków, np. Aby zawsze działała?
Coś takiego:
tasks:
- name: Trigger handler
run_handler: name=nginx-restart
Odpowiedzi:
Jeśli musisz za każdym razem uruchamiać moduł obsługi, oto dwie opcje:
1) uruchom polecenie powłoki noop, które zawsze będzie zgłaszać zmiany
2) użyj debugowania wraz ze zmiennym_when: aby uruchomić moduł obsługi
Należy również zwrócić uwagę na opcję 1 i tryb sprawdzania: Możesz użyć tej opcji,
check_mode: no
jeśli używasz Ansible w wersji 2.2 lub wyższej lubalways_run: yes
jeśli korzystasz z wcześniejszych wersji, aby zadanie nie zostało pominięte w trybie sprawdzania. Z mojego ręcznego testowania wygląda na to, że programy obsługi pozostają w trybie sprawdzania, ale należy zachować ostrożność, ponieważ sprawa może się różnić.źródło
changed_when
bardziej logicznej, aby zaimplementować nie idempotentne zadanie [które w niektórych przypadkach może być wywołane więcej niż raz] jako program obsługi, a nie zadanie.Ansible udostępnia kilka opcji wymuszania procedur obsługi:
1) Aby zawsze wymusić wszystkie programy obsługi, uruchom
ansible-playbook playbook.yml --force-handlers
zgodnie z dokumentacją tutaj: https://github.com/ansible/ansible/issues/47772) Aby wymusić procedury obsługi, które zostały powiadomione w określonym punkcie w podręczniku, możesz użyć meta zadania https://docs.ansible.com/playbooks_intro.html :
3) Jednak wydaje się, że chcesz tylko upewnić się, że usługa jest uruchomiona lub uruchomiona ponownie, niezależnie od wyniku innego zadania. W takim przypadku nie używaj
service
modułu obsługi, użyj nowego zadania, które wywołuje moduł Ansible : http://docs.ansible.com/service_module.htmlźródło
Ponowne uruchomienie usługi to jedno; upewnienie się, że działa, to kolejne. Jeśli chcesz
ansible
mieć pewność, żenginx
działa, wykonaj następujące czynności:źródło