我正在尝试迭代嵌套循环,就像这个问题:
我需要更深入一点。那里的评论(日期为2017年1月)表明,不支持额外的嵌套级别。这仍然是这样吗?如果没有,我如何参考更深层次?
我的数据:
dns:
- name: Something
prefix: st
zones:
- zone: something.com
records:
- record: testing.something.com
type: TXT
value: '"somethingtest"'
ttl: 60
- name: Devthing
prefix: dt
zones:
- zone: devthing.com
records:
- record: testing.devthing.com
type: TXT
value: '"devthingtest"'
ttl: 60
- zone: testthing.com
records:
- record: testing.testthing.com
type: TXT
value: '"testthingtest"'
ttl: 60
- record: thingy.testthing.com
type: TXT
value: '"testthingthingytest"'
ttl: 60
我的任务:
- name: Create DNS records
route53:
state: present
zone: "{{ item.0.zone }}"
record: "{{ item.1.record }}"
type: "{{ item.1.type }}"
ttl: "{{ item.1.ttl }}"
value: "{{ item.1.value }}"
with_subelements:
- "{{ dns }}"
- records
区域,用户和访问策略已成功创建,因为它们不需要更深层次(记录级别)。
答案 0 :(得分:2)
如果您不需要来自root dict的name
和prefix
,则可以将原始列表缩减为简单的区域列表:
with_subelements:
- "{{ dns | map(attribute='zones') | list | sum(start=[]) }}"
- records
并且 - 没有 - 嵌套的子元素仍然不受支持。
如果需要父选项,更新,则需要进行一些预处理:
- set_fact:
zones_loop: >
{{ zones_loop|d([])
+ [ {} | combine(item[0]) | combine(item[1]) ]
}}
with_subelements:
- "{{ dns }}"
- zones
- debug:
msg: "{{ item }}"
with_subelements:
- "{{ zones_loop }}"
- records
通过第一个任务,我们遍历每个zone
并将父键附加/组合到它们,形成新的zones_loop
列表。第二个任务是相同的,但我们遍历生成的列表。