Ich verwende Ansible, um meinen Entwicklungsserver bereitzustellen.
Ich möchte, dass immer einige Dienste für mich gestartet werden. Ich habe Handler für diesen Zweck, aber was ist der beste Weg, um die Ausführung eines Handlers ohne Bedingung auszulösen, z. B. damit es immer funktioniert?
Etwas wie das:
tasks:
- name: Trigger handler
run_handler: name=nginx-restart
Antworten:
Wenn Sie unbedingt jedes Mal einen Handler auslösen müssen, haben Sie zwei Möglichkeiten:
1) Führe einen noop Shell Befehl aus, der immer als geändert meldet
2) Verwenden Sie debug zusammen mit changed_when:, um einen Handler auszulösen
Auch der Note für Option 1 und Prüfmodus: Sie können verwendet werden sollen ,
check_mode: no
wenn ansible Version 2.2 oder höher oder mitalways_run: yes
bei Verwendung von früheren Versionen als das so , dass die Aufgabe in Prüfmodus nicht bekommen übersprungen. Aus meinen manuellen Tests geht hervor, dass sich die Handler weiterhin im Überprüfungsmodus befinden. Seien Sie jedoch vorsichtig, da sich Ihr Fall möglicherweise unterscheidet.quelle
changed_when
mit mehr Logik verwendet, um eine nicht-idempotente Aufgabe (die in einigen Fällen mehrmals aufgerufen werden kann) als Handler und nicht als Aufgabe zu implementieren.Ansible bietet mehrere Optionen zum Erzwingen von Handlern:
1) Um immer alle Handler zu erzwingen, führen Sie
ansible-playbook playbook.yml --force-handlers
die folgenden Schritte aus: https://github.com/ansible/ansible/issues/47772) Um Handler zu erzwingen, die an einem bestimmten Punkt innerhalb eines Playbooks benachrichtigt wurden, können Sie eine Meta-Task https://docs.ansible.com/playbooks_intro.html verwenden :
3) Es hört sich jedoch so an, als ob Sie nur sicherstellen möchten, dass ein Dienst ausgeführt oder neu gestartet wird, unabhängig vom Ergebnis einer anderen Aufgabe. Verwenden Sie in diesem Fall keinen Handler, sondern eine neue Task, die das
service
Modul von Ansible aufruft : http://docs.ansible.com/service_module.htmlquelle
Ein Neustart eines Dienstes ist eine Sache. sicherzustellen, dass es läuft, ist eine andere. Wenn Sie
ansible
sicherstellen möchten , dass das Programm ausgeführtnginx
wird, gehen Sie wie folgt vor:quelle