2016-11-03 5 views
1

Ich versuche, einen Befehl zu wiederholen und warten auf eine bestimmte Phrase in stdout, aber die Aufgabe wird vorzeitig fehlschlagen, weil der Befehl "1" zurückgibt, wenn es keine Verbindung herstellen kann. Wie kann ich den Rückgabecode ignorieren?Ansible: Wie man einen Befehl wiederholt und den Rückkehrcode ignoriert?

- name: Wait for Fabric Creation to complete 
    action: shell /usr/local/jboss/jboss-fuse/bin/client container-list 
    register: result 
    until: result.stdout.find("success") 
    retries: 20 
    delay: 10 
+0

der Return-Code wird auf stdout oder stderr kommt? Können Sie den Inhalt des Ergebnisses angeben, wenn keine Verbindung hergestellt wird? – Shasha99

+0

@ Shasha99 Ich bin mir nicht sicher, wonach du gefragt hast. Der [Returncode] (https://en.wikipedia.org/wiki/Exit_status) hat weder mit stdout noch mit stderr etwas zu tun. – techraf

+0

Ohh .. also du redest über result.rc. Ich hatte verschiedene Gedanken. – Shasha99

Antwort

0

Es ist nicht wirklich ein Problem mit dem Befehl versagt (wird auf dem Return-Code des Shell-Skript basieren, obwohl die Aufgabe Ergebnis - das mit failed_when verändert werden kann).

Das eigentliche Problem ist in der folgenden Bedingung selbst:

until: result.stdout.find("success") 

find kehrt -1 Wert, wenn keine Übereinstimmung gefunden wird, so dass eine boolean Prüfung besteht tatsächlich, wenn es keine success Zeichenfolge im stdout ist. Die Bedingung in until ist somit beim ersten Durchlauf erfüllt.


Sie müssen den Zustand ändern:

- name: Wait for Fabric Creation to complete 
    action: shell /usr/local/jboss/jboss-fuse/bin/client container-list 
    register: result 
    until: result.stdout.find("success") != -1 
    retries: 20 
    delay: 10 
+0

Super! Vielen Dank! –

Verwandte Themen