2016-11-04 5 views
1

Beim Ausführen von Ansible-Playbooks treten häufig Anwendungsfälle auf, in denen erwartet wird, dass eine Aufgabe (normalerweise Shell oder Befehl) Fehlercodes zurückgibt.Wie vermeidet man, dass schwerwiegende Aufgabenfehler mit ansible übersprungen werden?

Bisher war die Lösung, das Ergebnis zu registrieren und ignore_errors: true hinzuzufügen und später zu entscheiden, ob es ein echter Fehler war oder nicht.

Jetzt gibt es ein Problem mit diesem: es wird Schlamassel die Protokollierung wie Sie rot Fehler sehen wie

fatal: ... 
...ignoring 

Gibt es eine Möglichkeit, diese zu vermeiden, so würden wir nicht fälschen Fehler in den Protokollen haben?

+0

Im Zusammenhang mit https://stackoverflow.com/questions/45983636/how-to-always-run-some-ansible-roles-nach-vorher-fehlern – sorin

Antwort

-1

Der beste Weg ist https://stackoverflow.com/a/40430875/1849837 (verwenden Sie changed_when und failed_when). Beachten Sie, dass es von Ansible seit 1.4 funktioniert.

Für ältere Ansible-Version ist die einzige Möglichkeit, die ich sehe (und verwenden) ist, keine potenziell fehlerhafte Aufgabe überhaupt auszuführen. Sie können hierfür Bedingungen (when) verwenden.

Zuerst müssen Sie den Zustand überprüfen und das Ergebnis der Prüfung auf die Variable

- name: "check if condition is met" 
    command: some condition that populates result 
    register: result 

- name: "some operation" 
    command: operation that runs only if result is not failed. 
    when: result|failed 

Dies beinhaltet einigen Standardcode zuweisen (Sie künstlichen Schritt müssen die Bedingung testen), aber ich sehe keine besseren Alternativen. Ich glaube, dass dies besser ist als die Verschmutzung der Protokolle mit fatal: ... ...ignoring.

+2

Das ein schrecklicher Hack, schauen @Konstantin Suworow Antwort. –

+0

Ich stimme zu, dass Ihre Antwort besser ist. Aber failed_when ist seit Ansible 1.4 verfügbar. Ich habe meine und deine Antwort bearbeitet, um das zu spezifizieren. –

5

failed_when und changed_when ist, Ihnen zu helfen:

- shell: echo good | grep bad 
    register: res 
    failed_when: false 
    changed_when: false 

Das immer gut sein wird und grün trotz fehlgeschlagenen Shell-Befehl.
Sie können auch eine komplexe failed_when-Anweisung basierend auf der registrierten Variablen definieren.

Verwandte Themen