Ansible 与_子元素可交换

Ansible 与_子元素可交换,ansible,Ansible,我很难理解ansible with_subelements语法的逻辑,with_subelements到底做什么?我在这里查看了关于with_子元素的ansible文档,并没有太大帮助。我还在一个博客上看到了一本带有_子元素示例的剧本 --- - hosts: cent vars: users: - name: jagadish comments: - 'Jagadish is Good' - name: srini

我很难理解ansible with_subelements语法的逻辑,with_subelements到底做什么?我在这里查看了关于with_子元素的ansible文档,并没有太大帮助。我还在一个博客上看到了一本带有_子元素示例的剧本

---
- 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指的是什么?

这是
子元素查找工作原理的一个非常糟糕的例子。(并且具有旧的、不受支持的语法)

看看这个:

---
- 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
任务列表子元素类似于嵌套的循环,位于
族的
列表(外循环)和每个族的
子元素的
子元素(内循环)。
因此,您应该提供一个dict列表,作为
子元素的第一个参数,以及要在每个外部项中迭代的子元素的名称

这样,
item.0
(在我的示例中是family)是外部项,
item.1
(在我的示例中是child)是内部项


在Ansible docs示例中,
子元素
用于循环用户(外部)并添加多个公钥(内部)。

这比Ansible docs的解释好一百万倍,现在是一个后续问题,如果我想让另一个内部循环说孙子,子元素在这种情况下是如何工作的?第三个嵌套循环不行,afaik。根据您的任务
map
json\u query
可能有用。ansible子元素文档示例已在2.4[1]和2.7[2]之间删除。新的方法是使用
循环:{{families | subelements('children')}}
[2]。再次感谢这个例子。[1] [2]您好,如果您发现一些文档没有它应有的用处,请毫不犹豫地用您希望找到的信息提出问题。开发人员在编写文档时会很难模仿他们的用户。我不会,虽然这个特殊的案例我不认为这是一个问题,更像是一个问题。