【问题标题】:Ansible with_subelementsAnsible with_subelements
【发布时间】:2017-06-14 00:07:34
【问题描述】:

我很难理解 ansible with_subelements 语法的逻辑,with_subelements 到底是做什么的?我在https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#with-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

item.1 和 item.0 指的是什么?

【问题讨论】:

  • 您好,如果您发现某些文档没有应有的用处,请不要犹豫,使用您希望找到的信息打开问题。开发人员在编写文档时可能难以冒充用户。
  • 我不会,虽然这个特殊情况我不会认为这是一个问题,它更像是一个如何提问

标签: ansible


【解决方案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 每个族中的子元素(内循环)上。
因此,您应该提供一个字典列表作为subelements 的第一个参数以及要在每个外部项目中迭代的子元素的名称。

这样item.0(在我的例子中是family)是一个外部项目,item.1(在我的例子中是孩子)是一个内部项目。

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

【讨论】:

  • 这比 Ansible 文档中的解释好一百万倍,现在是一个后续问题,如果我想让另一个内部循环说孙子,子元素如何在这种情况下工作?
  • 第三个嵌套循环没办法,afaik。根据您的任务,mapjson_query 可能有用。
  • ansible 子元素文档示例已在 2.4 [1] 和 2.7 [2] 之间删除。新的方法是使用loop: "{{ families|subelements('children') }}" [2]。再次感谢这个例子。 [1] docs.ansible.com/ansible/2.4/… [2] docs.ansible.com/ansible/latest/user_guide/…
  • @ahmedjaad 据我了解,subelements 只工作 2 层深度。我仍然可以将子孙处理放入一个角色中,这样我就可以遍历每个家庭,并为每个家庭调用该角色。
猜你喜欢
  • 1970-01-01
  • 2018-09-21
  • 2020-06-06
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多