Ansible: Führt einen Task (oder Handler) aus, wenn eine Task fehlgeschlagen ist

11

Ich benutze Ansible, um eine Django-Website auf meinen Servern bereitzustellen (Produktion, Staging usw.), und ich möchte eine Benachrichtigung (in diesem Fall über den Slack) erhalten, wenn und nur wenn eine Aufgabe fehlschlägt.

Ich kann nur herausfinden, wie es gemacht wird, wenn eine bestimmte Aufgabe fehlschlägt (also könnte ich einen Handler zu allen Aufgaben hinzufügen), aber die Intuition sagt mir, dass es eine einfachere und elegantere Option geben muss.

Grundsätzlich denke ich an:

%Vor%

Ich habe in die Ansible-Dokumentation getaucht, insbesondere in den Abschnitt Fehlerbehandlung , der hier bei SO beantwortet wird , aber ich bemühe mich, eine Antwort auf meine Frage zu finden. So wird jede Hilfe sehr geschätzt.

    
vabada 09.03.2016, 13:05
quelle

2 Antworten

25

Ich denke nicht, dass ein Handler eine Lösung ist, weil ein Handler nur benachrichtigt wird, wenn der Task einen geänderten Status meldet. Bei einem fehlgeschlagenen Status wird der Handler nicht benachrichtigt.

Außerdem werden standardmäßig keine Handler ausgelöst, wenn das Playbook fehlgeschlagen ist. Aber das kann sich ändern. Dafür müssen Sie dies in Ihrem ansible.cfg :

festlegen %Vor%

Aber ja, es gibt bessere Möglichkeiten.

Wenn Sie Ansible 2 verwenden, können Sie die neue Funktion Blöcke verwenden. Blöcke gruppieren Aufgaben zusammen und haben einen Rettungsabschnitt, der nur ausgelöst wird, wenn eine der Aufgaben fehlgeschlagen ist.

%Vor%

Eine weitere Option und besonders interessant, wenn Sie Ansible 1.x verwenden, sind Callback-Plugins . Wie der Name schon sagt, können Sie mit diesen Plugins Callbacks schreiben, die bei verschiedenen Ereignissen ausgelöst werden können.

Wenn du Ansible 2 verwendest, hast du Glück, denn es gibt bereits ein lockeres Callback-Plugin: Ссылка

Um dieses Plugin zu verwenden, müssen Sie es in Ihrem ansible.cfg :

aktivieren %Vor%

Und definieren Sie einige Umgebungsvariablen auf Ihrem System für die Konfiguration:

%Vor%

Dieses Plugin könnte einige Modifikationen benötigen, um Ihre Bedürfnisse zu erfüllen. Wenn dies der Fall ist, kopiere die Quelle und speichere sie als callback_plugins/custom_slack.py relativ zu deinem Playbook und aktiviere sie dann in deinem ansible.cfg :

%Vor%

Wenn Sie Ansible 1.x verwenden, müssen Sie sehen, wie Sie es konvertieren können. Die API ist anders, Beispiele für die alte API finden Sie hier: Ссылка

    
udondan 09.03.2016, 13:49
quelle
2

Ich habe ein vollständiges Beispiel für die Verwendung von Block / Rescue und das Slack-Modul (nicht Callback-Plugin) geschrieben, das aussagekräftige Fehler bei der Formatierung liefert:

Die erste Antwort hier hat mich Teil des Weges, aber nur für jeden anderen, der auf diese Weise mit demselben Ding kämpft!

Ein einfaches Beispiel für ein Playbook sieht folgendermaßen aus:

Playbooks / playbook.yml

%Vor%

Und in meiner Rolle slack_handler (für Wiederverwendbarkeit):

Rollen / slack_handler / tasks / failure.yml

%Vor%

Hinweis: Ссылка

    
monkeymatrix 07.02.2018 18:45
quelle

Tags und Links