Est-il possible de sauter certains éléments dans l'opérateur de boucle Ansible with_items
, sur une base conditionnelle, sans générer d'étape supplémentaire?
Juste par exemple:
- name: test task
command: touch "{{ item.item }}"
with_items:
- { item: "1" }
- { item: "2", when: "test_var is defined" }
- { item: "3" }
dans cette tâche, je veux créer le fichier 2 uniquement lorsque test_var
est défini.
L'autre réponse est proche mais passera à côté de tous les éléments! = 2. Je ne pense pas que ce soit ce que vous souhaitiez. voici ce que je ferais:
- hosts: localhost
tasks:
- debug: msg="touch {{item.id}}"
with_items:
- { id: 1 }
- { id: 2 , create: "{{ test_var is defined }}" }
- { id: 3 }
when: item.create | default(True) | bool
Le when:
conditionnel à la tâche est évalué pour chaque élément. Donc dans ce cas, vous pouvez simplement faire:
...
with_items:
- 1
- 2
- 3
when: item != 2 and test_var is defined
Ce que vous voulez, c'est que les fichiers 1 et 3 soient toujours créés mais que le fichier 2 ne soit créé que lorsque test_var
est défini. Si vous utilisez la condition ansible lorsque cela fonctionne, la tâche est complète et non sur des éléments individuels comme celui-ci:
- name: test task
command: touch "{{ item.item }}"
with_items:
- { item: "1" }
- { item: "2" }
- { item: "3" }
when: test_var is defined
Cette tâche vérifie la condition pour les trois postes 1,2 et 3.
Cependant, vous pouvez y parvenir par deux tâches simples:
- name: test task
command: touch "{{ item }}"
with_items:
- 1
- 3
- name: test task
command: touch "{{ item }}"
with_items:
- 2
when: test_var is defined