代码之家  ›  专栏  ›  技术社区  ›  Noah Watkins

在Ansible中结合嵌套列表的列表上循环

  •  1
  • Noah Watkins  · 技术社区  · 6 年前

    我有两个列表要循环在一起。一个包含主机列表,第二个包含列表列表,其中嵌套列表是用于在每个主机上重复任务的一组项。下面是一个简单的例子:

    主机列表

    hosts:
      - host1
      - host2
    

    要在每个主机上执行的操作列表。这个 hosts ops 列表长度相同,因此 op1 op2 应该在 host1 op{3,4,5} 应该在 host2 .

    ops:
      -
        - op1
        - op2
      -
        - op3
        - op4
        - op5
    

    然后我想用这两个列表来重复一个任务

    - name: my task
      module: "{{ item.1 }}"
      delegate_to: "{{ item.0 }}"
      with_together:
        - hosts
        - ops
    

    不幸的是,从那时起这就不起作用了 item.1 将是一个列表(我想重复一次 my_task 对于每个操作)。什么的 with_nested 也不行,因为我不想重复 全部的 存在于 老年退休金 在每个主机上。

    我希望有一个简洁的解决方案,这样我就可以避免构建一些中间数据结构。

    2 回复  |  直到 6 年前
        1
  •  0
  •   robinhoodjr    6 年前

    您必须按如下方式重新格式化文件:

    ops:
      - list:
          - ops1
          - ops1
      - list:
          - ops3
          - ops4
          - ops5
    

    - name: my task
      module: "{{ item[1] }}.*:ALL"
      delegate_to: "{{ item[0] }}"
      with_together:
        - "{{ hosts }}"
        - "{{ ops.list }}"
    

    使用我的手机,所以检查缩进。

        2
  •  0
  •   Jack    6 年前

    最简单的方法是将这些列表放入 host_vars/host1 host_vars/host2 .

    所以 主机/主机1 :

    ops:
       - op1
       - op2
    

    主机/主机2 :

    ops:
       - op3
       - op4
       - op5
    

    那么你的游戏可以是:

    - name: my task
      module: "{{ item }}"
      with_items: "{{ ops }}"