21 votes

Ansible avec_subelements

J'ai du mal à comprendre la logique de la syntaxe ansible with_subelements, que fait exactement with_subelements ? J'ai jeté un coup d'œil à la documentation ansible sur with_subelements ici. http://docs.ansible.com/ansible/playbooks_loops.html#looping-over-subelements et n'a pas été d'une grande aide. J'ai également vu un playbook avec l'exemple with_subelements sur un blog

---
- hosts: cent
  vars:
    users:
     - name: jagadish
       comments:
         - 'Jagadish is Good'

     - name: srini
       comments:
         - 'Srini is Bad' 

  tasks:
   - name: User Creation
     shell: useradd -c "{{ item.1 }}" "{{ item.0.name }}"
     with_subelements:
         - users
         - comments

À quoi se réfèrent les points 1 et 0 ?

45voto

Konstantin Suvorov Points 34119

C'est un très mauvais exemple de la façon dont subelements fonctionne. (Et a également une syntaxe ancienne, non supportée).

Regardez celle-ci :

---
- hosts: localhost
  gather_facts: no
  vars:
    families:
      - surname: Smith
        children:
          - name: Mike
            age: 4
          - name: Kate
            age: 7
      - surname: Sanders
        children:
          - name: Pete
            age: 12
          - name: Sara
            age: 17

  tasks:
    - name: List children
      debug:
        msg: "Family={{ item.0.surname }} Child={{ item.1.name }} Age={{ item.1.age }}"
      with_subelements:
        - "{{ families }}"
        - children

Tâche Liste des enfants est comme une boucle imbriquée sur families (boucle extérieure) et sur children dans chaque famille (boucle intérieure).
Vous devez donc fournir une liste de dicts comme premier argument de la commande subelements et le nom du sous-élément que vous souhaitez itérer à l'intérieur de chaque élément extérieur.

De cette manière item.0 (famille dans mon exemple) est un élément extérieur et item.1 (enfant dans mon exemple) est un élément interne.

Dans l'exemple de la documentation Ansible subelements est utilisé pour parcourir les utilisateurs (outer) et ajouter plusieurs clés publiques (inner).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X