web-dev-qa-db-fra.com

Ansible: Comment itérer sur un rôle avec un tableau?

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?

20
hewo

Maintenant supporté à partir de Ansible 2.3.0 :

- name: myrole
      with_items:
        - "aone"
        - "atwo"
      include_role:
        name: myrole
      vars:
        thing: "{{ item }}"
28
ritzk

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 }}" }
9
ydaetskcoR

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

4
Stefan Horning

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 }}"
0
kalaolani