Est-il possible d'appeler un rôle plusieurs fois dans une boucle comme ceci:
vars:
my_array:
- foo
- bar
- baz
roles:
- role: foobar
with_items: my_array
Comment peut-on le faire?
Maintenant supporté à partir de Ansible 2.3.0 :
- name: myrole
with_items:
- "aone"
- "atwo"
include_role:
name: myrole
vars:
thing: "{{ item }}"
Il n'y a pas de moyen aucun moyen de survoler un rôle actuellement, mais comme indiqué dans la discussion du groupe Google, vous pouvez transmettre une liste ou un dict au rôle, puis le parcourir en interne.
Vous pouvez donc faire quelque chose comme:
# loop_role/tasks/main.yml
- name: debug item
debug: var="{{ item }}"
with_items: my_array
Et puis utilisez-le comme ceci:
- hosts: all
vars:
my_array:
- foo
- bar
- baz
roles:
- { role: loop_role, my_array: "{{ my_array }}" }
Le module include_role
est documenté ici: https://docs.ansible.com/ansible/include_role_module.html
Selon la documentation, il a déjà été introduit dans Ansible 2.2
Voici un exemple de code permettant d'utiliser la boucle include_role sur my_array:
- name: Use role in loop
include_role:
name: myrole
loop: "{{ my_array }}"