2014-03-31 8 views
21

Ich möchte die Ausführung der verbleibenden Aufgabe abbrechen, wenn eine bestimmte Bedingung fehlgeschlagen ist. und korrekte Fehlermeldung anzeigen.Abbruch der Ausführung der verbleibenden Aufgabe, wenn eine bestimmte Bedingung fehlgeschlagen ist

Anstatt die verbleibende Aufgabe zu überspringen, möchte ich eine Fehlermeldung anzeigen und die Ausführung von Ansible Playbook stoppen.

Lets sagen, dass ich unter Befehl leite

$ ansible-playbook playbook.yml -e "param1=value1 param2=value" 

My Playbook sieht wie folgt aus: -

playbook.yml: -

--- 
    - hosts: local 
     user: roop 
     gather_facts: no 

     vars: {param1: "", param2: ""} 

     tasks: 

     #check whether param1 defined 
     - name: 'Check for valid param1' 
      shell: echo {{ param1 }} 
      register: isValidParam1 
      when: param1 !="" 

     #check if param1 is null or invalid 
     - name: 'check if param1 is null or invalid' 
      debug: msg="Please enter correct param1" 
      when: param1 == "" 

     #check whether param2 defined 
     - name: 'Check for valid param2' 
      shell: echo {{ param2 }} 
      register: isValidParam2 
      when: param2 != "" 

     #check if param2 is null or invalid 
     - name: 'check if param2 is null or invalid' 
      debug: msg="Please enter correct param2" 
      when: param2 == "" 


     #check params is valid and defined 
     - name: 'Check for valid params' 
      shell: echo "param1={{ param1 }} param2={{ param2 }} 
      register: validParams 
      when: isValidParam1 is defined and isValidParam2 is defined 

     #check if params are invalid then abort below all tasks. 
     - name: 'check if validParams is null or invalid' 
      debug: msg="Please enter correct Params" 
      when: validParams is not defined  


     # based on validParams, and different value of param1 more than 
      10 task executing. 

Wie ich in meinem letzten erwähnt haben Aufgabenkommentar Ich führe mehr als 10 Aufgaben basierend auf validParams und param1 unterschiedlichen Wert durch. Was ich hier brauche ist wenn validParams nicht definiert ist dann alle Ausführung abbrechen und Fehlermeldungen anzeigen.

Gibt es einen effizienten Weg, dies zu tun. Bitte schlage mich vor.

Antwort

38

können Sie assert http://docs.ansible.com/assert_module.html verwenden oder http://docs.ansible.com/fail_module.html

Es wird scheitern einen block feature mit so etwas wie dieses

 #check if params are invalid then abort below all tasks. 
     - name: 'check parm is null or invalid' 
      fail: msg="Please enter correct Params" 
      when: "param1 is not defined or param2 is not defined " ## whatever condition you want 
+0

Ja. Ich habe diese Lösung gefunden. Vielen Dank – Roopendra

+0

Ich denke nicht, dass dies eine Lösung sein könnte, da es die Aufgabe als fehlgeschlagen markiert, während das, was wir wirklich wollen, nur überspringen. –

+1

@EddieC. Die Frage speziell erwähnt: "... Ich möchte Fehlermeldung anzeigen und Ausführung von Ansible Playbook beenden." – raarts

1

ansible> = 2,0 hat mitgehen, die Sie logisch Gruppenaufgaben ermöglicht. Auf diese Weise können Sie eine unter auf eine Gruppe von Aufgaben anwenden.

Der wesentliche Unterschied zwischen diesem und dem scheitern oder assert Module ist, dass die Aufgabe als gescheitert nicht markiert ist; Es wird einfach übersprungen. Ob das besser ist, hängt von Ihrem Anwendungsfall ab. Zum Beispiel habe ich einige Aufgaben, die in ein Protokoll schreiben, das später für Fehler analysiert wird; Es ist einfacher, dies zu tun, wenn nur "echte" Fehlerbedingungen protokolliert werden.

Beispielcode:

- block: 

    # task 1 

    # task 2 

    # task 3 

    when: "param1 is defined or param2 is defined" 

# otherwise output a message 
- block: 

    debug: msg="Missing params" 

    when: "param1 is not defined or param2 is not defined" 
Verwandte Themen