Подтвердить что ты не робот

Несоблюдение данных

Мне трудно понять логику синтаксиса ansible with_subelements, что именно делает с помощью_объектов? Я посмотрел на документацию, посвященную in_subelements здесь http://docs.ansible.com/ansible/playbooks_loops.html#looping-over-subelements и не очень помог. Я также видел playbook с примером of_subelements в блоге

---
- 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

что относятся к item.1 и item.0?

4b9b3361

Ответ 1

Это действительно плохой пример того, как работает поиск subelements. (И имеет старый, неподдерживаемый, синтаксис).

Посмотрите на это:

---
- 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

Дети списка задач похожи на вложенный цикл поверх families (внешний цикл) и надэлемент children в каждом семействе (внутренний цикл).
Поэтому вы должны предоставить список dicts в качестве первого аргумента subelements и имя подэлемента, который вы хотите итерировать внутри каждого внешнего элемента.

Таким образом item.0 (семейство в моем примере) является внешним элементом и item.1 (дочерний элемент в моем примере) является внутренним элементом.

В примере Ansible docs subelements используется для циклического переключения пользователей (внешних) и добавления нескольких открытых ключей (внутренних).