web-dev-qa-db-fra.com

Interrompre l'exécution de la tâche restante en cas d'échec d'une condition

Je souhaite interrompre l'exécution de la tâche restante si certaines conditions échouent. et afficher le message d'erreur approprié.

Donc, au lieu de sauter la tâche restante, je veux afficher un message d'erreur et arrêter l'exécution du playbook ansible.

Disons que je cours sous la commande

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

Mon playbook ressemble à ceci: -

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.

Comme je l'ai mentionné dans mon dernier commentaire de tâche. J'exécute plus de 10 tâches basées sur validParams et param1 valeur différente. Ce dont j'ai besoin ici si validParams n'est pas défini, alors abandonnez toute exécution et affichez les messages d'erreur.

Existe-t-il un moyen efficace de le faire? Veuillez me suggérer.

34
Roopendra

Vous pouvez utiliser assert http://docs.ansible.com/assert_module.html ou fail http://docs.ansible.com/fail_module.html

Il ira de pair avec quelque chose comme ça

        #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

Donc, dans Ansible 2.2+, il y a le méta-module: http://docs.ansible.com/ansible/latest/meta_module.html

Alors

meta: end_play

arrête le playbook avec un statut non défaillant

18
Florian Braun

Ansible> = 2.0 a une fonctionnalité de blocage qui vous permet de grouper logiquement les tâches. Cela vous permet d'appliquer un lorsque à un groupe de tâches.

La principale différence entre cela et les modules échouent ou assert est que le la tâche n'est pas marquée comme ayant échoué; c'est juste sauté. Que ce soit mieux dépend de votre cas d'utilisation. Par exemple, j'ai certaines tâches qui écrivent dans un journal qui est ensuite analysé pour les échecs; il est plus facile de le faire si seules des conditions de défaillance "réelles" sont enregistrées.

Exemple de code:

- 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