【问题标题】:Ansible: Interate over tree structureAnsible:迭代树结构
【发布时间】:2020-04-13 07:22:17
【问题描述】:

我想迭代树结构。

如何仅迭代 level1 和 level2 ? (我想看到如下所示的 name 和 level0 之间的关联)

也许结构错了? ( json | dict 或其他列表?)

---
- name: test
  hosts: localhost
  gather_facts: no
  vars:
   directories:
    - name: DIR1
      level0:
       - name: SUBDIR1
         level1:
           - name: SUBDIR11
             level2:
              - name: SUBDIR111
              - name: SUBDIR112
           - name: SUBDIR12
             level2:
              - name: SUBDIR121
              - name: SUBDIR122
       - name: SUBDIR2
       - name: SUBDIR3
    - name: DIR2
      level0:
       - name: SUBDIR1
       - name: SUBDIR2
       - name: SUBDIR3

  tasks:
  - name: Debug level0
    debug:
      msg: "DIR {{item.0.name}} Subdir {{item.1.name}}"
    loop: "{{ directories | subelements('level0') }}"

【问题讨论】:

    标签: python loops tree ansible


    【解决方案1】:

    有四个嵌套列表。因此需要两个带有子元素的嵌套循环。例如,使用文件loop-item.yml中包含的任务

    shell> cat loop-item.yml
    - debug:
        msg: "{{ outer_item.0.name }} {{ outer_item.1.name }} {{ item.0.name }} {{ item.1.name }}"
      loop: "{{ outer_item.1.level1|default([])|subelements('level2') }}"
    

    任务

      - include_tasks: loop-item.yml
        loop: "{{ directories|subelements('level0') }}"
        loop_control:
          loop_var: outer_item
    

    给出嵌套列表的分解

        "msg": "DIR1 SUBDIR1 SUBDIR11 SUBDIR111"
        "msg": "DIR1 SUBDIR1 SUBDIR11 SUBDIR112"
        "msg": "DIR1 SUBDIR1 SUBDIR12 SUBDIR121"
        "msg": "DIR1 SUBDIR1 SUBDIR12 SUBDIR122"
    

    问:“可能结构不对?(json | list of dict or other ?)”

    A:结构很好。只能迭代列表。无论如何,任何其他结构都必须转换为列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多