it-swarm.com.de

Bricht die Ausführung der verbleibenden Aufgabe ab, wenn eine bestimmte Bedingung nicht erfüllt ist

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

Anstatt die verbleibende Aufgabe zu überspringen, möchte ich eine Fehlermeldung anzeigen und die Ausführung eines anzeigbaren Playbooks stoppen.

Nehmen wir an, ich renne unter dem Kommando

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

Mein Spielbuch sieht so 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 Aufgabenkommentar erwähnt habe. Ich führe mehr als 10 Aufgaben aus, basierend auf validParams und param1 anderer Wert. Was ich hier brauche, wenn validParams undefiniert ist, dann brich die Ausführung ab und zeige Fehlermeldungen.

Gibt es einen effizienten Weg, dies zu tun? Bitte schlagen Sie mich vor.

34
Roopendra

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

Es wird mit so etwas gehen

        #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
54
DomaNitro

In Ansible 2.2+ gibt es also das Metamodul: http://docs.ansible.com/ansible/latest/meta_module.html

So

meta: end_play

stoppt das Playbook mit einem nicht fehlgeschlagenen Status

18
Florian Braun

Ansible> = 2.0 verfügt über eine Blockfunktion , mit der Sie Aufgaben logisch gruppieren können. Auf diese Weise können Sie ein beim auf eine Gruppe von Aufgaben anwenden.

Der Hauptunterschied zwischen diesem und den fehlgeschlagenen oder zu behaupten Modulen ist, dass das Die Aufgabe ist nicht als fehlgeschlagen markiert. es ist nur übersprungen. Ob dies besser ist, hängt von Ihrem Anwendungsfall ab. Zum Beispiel habe ich einige Aufgaben, die in ein Protokoll schreiben, das später auf Fehler analysiert wird. Dies ist einfacher, wenn nur "echte" Fehlerzustände 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"
6
hillsy