La documentation pour import_tasks
mentions
Toutes les boucles, conditions et la plupart des autres mots-clés seront appliqués aux tâches incluses, pas à cette déclaration.
C'est exactement ce que je veux. Malheureusement, lorsque je tente de faire fonctionner import_tasks
avec une boucle
- import_tasks: msg.yml
with_items:
- 1
- 2
- 3
Je reçois le message
ERREUR! Vous ne pouvez pas utiliser de boucles sur les instructions 'import_tasks'. Vous devriez utiliser 'include_tasks' à la place.
Je ne veux pas le comportement include_tasks
, car cela applique la boucle au fichier inclus et duplique les tâches. Je souhaite spécifiquement exécuter la première tâche pour chaque variable de boucle (en tant que tâche avec la sortie standard with_items
), puis la seconde, etc. Comment puis-je obtenir ce comportement?
En particulier, considérez ce qui suit:
Supposons que j'ai les fichiers suivants:
playbook.yml
---
- hosts: 192.168.33.100
gather_facts: no
tasks:
- include_tasks: msg.yml
with_items:
- 1
- 2
msg.yml
---
- name: Message 1
debug:
msg: "Message 1: {{ item }}"
- name: Message 2
debug:
msg: "Message 2: {{ item }}"
J'aimerais que les messages imprimés soient
Message 1: 1
Message 1: 2
Message 2: 1
Message 2: 2
Cependant, avec import_tasks
je reçois une erreur et avec include_tasks
je reçois
Message 1: 1
Message 2: 1
Message 1: 2
Message 2: 2
Vous pouvez ajouter une boucle with_items
en prenant une liste pour chaque tâche du fichier importé et appeler import_tasks
avec une variable que vous transmettez à la boucle with_items
intérieure. Cela déplace la gestion des boucles vers le fichier importé et nécessite la duplication de la boucle sur toutes les tâches.
Compte tenu de votre exemple, cela modifierait les fichiers en:
playbook.yml
---
- hosts: 192.168.33.100
gather_facts: no
tasks:
- import_tasks: msg.yml
vars:
messages:
- 1
- 2
msg.yml
---
- name: Message 1
debug:
msg: "Message 1: {{ item }}"
with_items:
- "{{ messages }}"
- name: Message 2
debug:
msg: "Message 2: {{ item }}"
with_items:
- "{{ messages }}"
Ce n'est pas possible. include
/import
instructions fonctionnent avec les fichiers de tâches dans leur ensemble.
Donc, avec les boucles, vous aurez:
Task 1 with Item 1
Task 2 with Item 1
Task 3 with Item 1
Task 1 with Item 2
Task 2 with Item 2
Task 3 with Item 2
Task 1 with Item 3
Task 2 with Item 3
Task 3 with Item 3