2017-10-03 8 views
0

J'essaie d'inclure des tâches dans le bloc avec une condition de moment. De plus, certaines tâches à l'intérieur de ce bloc ont des conditions supplémentaires. Le problème est que de telles tâches (avec des conditions supplémentaires) sont ignorées. L'état des deux blocs et toutes les conditions supplémentaires sont vraies.Conditions supplémentaires pour les tâches à l'intérieur d'un bloc

Ci-dessous il y a un jeu d'échantillons:

- block:  

    - set_fact: 
     packages_to_install: "{{ packages_to_install }} + [ '{{ (distrs.stdout | from_json).postgresql }}' ]" 

    - set_fact: 
     packages_to_install: "{{ packages_to_install }} + [ '{{ (distrs.stdout | from_json).webserver }}' ]" 
    when: 
    - server.webserver is defined 
    - server.webserver == true 

    when: 
    - server is defined 

Ainsi, postgresql est ajouté à la liste des paquets, mais n'est pas webserver.

Selon the docs, toutes les tâches à l'intérieur du bloc seront exécutées après avoir ajouté la condition when du bloc et l'avoir évalué dans le contexte de la tâche. Peut-être que ce n'est pas seulement possible dans Ansible 2.4 d'avoir des tâches jointes avec des conditions supplémentaires?

+0

Veuillez corriger le problème d'indentation - vous avez deux clauses 'when:' attachées à l'instruction 'block:'. –

Répondre

3

Vous devez corriger l'indentation des déclarations when.

Peut-être que ce n'est pas seulement possible dans Ansible 2.4 d'avoir des tâches jointes avec des conditions supplémentaires?

Ansible 2.4 fonctionne ok:

tasks: 
    - block: 

    - debug: 
     msg: "task 1" 

    - debug: 
     msg: "task 2" 
     when: false 

    - debug: 
     msg: "task 3" 
     when: true 

    when: true 

résultats dans:

TASK [debug] ************************************************************************************************** 
ok: [localhost] => { 
    "msg": "task 1" 
} 

TASK [debug] ************************************************************************************************** 
skipping: [localhost] 

TASK [debug] ************************************************************************************************** 
ok: [localhost] => { 
    "msg": "task 3" 
} 

Et vous pouvez toujours commander à nouveau les clés block tâche pour plus de clarté:

tasks: 
    - when: true 
    block: 
     - debug: 
+0

Merci pour l'astuce liée à la réorganisation des clés - de cette façon, c'est beaucoup plus propre :) –

+0

En ce qui concerne mon problème d'origine - en fait, il y avait une erreur dans l'une de mes conditions. Le 'server.webserver' contient des données JSON, et il n'y avait pas d'indicateur booléen. J'ai donc corrigé la condition et tout a commencé à fonctionner comme prévu. Les indentations étaient correctes - j'ai juste posté le code de façon incorrecte. –