Je rencontre le problème le plus stupide. Je n'arrive pas à comprendre comment tester booléen dans un fichier de tâches Ansible 2.2.
Dans vars/main.yml
, J'ai:
destroy: false
Dans le livre de jeu, j'ai:
roles:
- {'role': 'vmdeploy','destroy': true}
Dans le fichier de tâches, j'ai les éléments suivants:
- include: "create.yml"
when: "{{ destroy|bool }} == 'false'"
J'ai essayé différentes combinaisons ci-dessous:
when: "{{ destroy|bool }} == false"
when: "{{ destroy|bool }} == 'false'"
when: "{{ destroy|bool == false}}"
when: "{{ destroy == false}}"
when: "{{ destroy == 'false'}}"
when: destroy|bool == false
when: destroy|bool == 'false'
when: not destroy|bool
Dans tous les cas ci-dessus, j'ai toujours:
statically included: .../vmdeploy/tasks/create.yml
Sortie de débogage:
- debug:
msg: "{{ destroy }}"
---
ok: [atlcicd009] => {
"msg": true
}
Le résultat souhaité, c'est qu'il saute l'include.
Pour exécuter une tâche lorsque destroy
est true
:
---
- hosts: localhost
connection: local
vars:
destroy: true
tasks:
- debug:
when: destroy
et quand destroy
est false
:
---
- hosts: localhost
connection: local
vars:
destroy: false
tasks:
- debug:
when: not destroy
Il n'est pas nécessaire d'utiliser le bool
filtre Jinja lorsque la valeur de la variable est définie sous hostvars.
Pour convertir les valeurs en certains types, par exemple lorsque vous saisissez une chaîne comme "True" à partir d'un vars_Prompt et que le système ne sait pas qu'il s'agit d'une valeur booléenne.
Donc un simple
when: not destroy
devrait faire l'affaire.