Ansible with_subelements

ahm*_*aad 27 ansible

我很难理解ansible with_subelements语法的逻辑,with_subelements究竟做了什么?我在http://docs.ansible.com/ansible/playbooks_loops.html#looping-over-subelements上查看了有关with_subelements的ansible文档,并没有太大帮助.我还在博客上看到了带有with_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
Run Code Online (Sandbox Code Playgroud)

item.1和item.0引用了什么?

Kon*_*rov 50

这是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
Run Code Online (Sandbox Code Playgroud)

任务列表子项就像一个嵌套循环families列表(外部循环)和children每个族中的子元素(内部循环).
因此,您应该提供一个dicts列表作为第一个参数subelements和要在每个外部项内迭代的子元素的名称.

这种方式item.0(我的例子中的族)是一个外部项目item.1(我的例子中的子项)是一个内部项目.

在Ansible文档中,示例subelements用于循环用户(外部)并添加几个公钥(内部).

  • ansible 子元素文档示例已在 2.4 [1] 和 2.7 [2] 之间删除。新的方法是使用`loop:"{{family|subelements('children') }}"`[2]。第二次感谢这个例子。[1] https://docs.ansible.com/ansible/2.4/playbooks_loops.html#looping-over-subelements [2] https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#with -子元素 (4认同)
  • 这是一个比Ansible文档更好的解释,现在是一个后续问题,如果我想让另一个内循环说孙子,如果子元素如何在这种情况下工作呢? (3认同)