Ansible with_subelements多层嵌套支持情况及深层引用方法问询
多层嵌套循环迭代数据的问题解答
嗨,我来帮你理清这个问题~
首先可以明确告诉你:现在主流的配置/自动化工具(比如你大概率在使用的Ansible)已经完全支持超过三层的嵌套循环了,2017年那时候的限制早就被移除啦。
针对你给出的DNS数据结构,要迭代到最深层的records条目,这里给你举个具体的实现例子(以Ansible为例,毕竟这类嵌套场景最常见于它):
你的原始数据结构:
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: app.devthing.com type: A value: "192.168.1.10" ttl: 300
要遍历到每一条record,可以使用subelements过滤器进行多层关联:
- name: 遍历所有DNS记录 debug: msg: "域名: {{ item.1.record }} | 类型: {{ item.1.type }} | 值: {{ item.1.value }}" loop: "{{ dns | subelements('zones') | subelements('1.records') }}"
简单解释下逻辑:
- 第一个
subelements('zones'):把dns列表里的每个条目和它的zones子列表关联起来,得到包含dns条目和对应zone的元组。 - 第二个
subelements('1.records'):在上一步的结果基础上,把每个元组里的zone(也就是元组的第1个索引位置的元素)和它的records子列表关联,最终就能直接拿到最深层的每条record数据了。
如果是其他工具的话,核心思路也是类似的:通过多层的嵌套遍历或者专门的层级关联方法,一步步深入到最底层的数据节点。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

