如何使用Ansible filter处理NIOS lookup返回的字典列表生成指定结构字典
实现方法
你可以通过两种方式完成转换,以下是可直接使用的代码示例:
方法1:使用过滤器链(无需循环,更简洁)
借助json_query预处理每个条目结构,再配合items2dict完成转换:
- set_fact: formatted_a_records: "{{ records | map('json_query', '{key: name, value: {a: ipv4addr}}') | items2dict }}"
逻辑说明:
map('json_query', ...)会遍历原A记录列表,把每条记录重新构造成{key: 域名, value: {'a': 对应IP}}的结构,刚好匹配items2dict的输入要求- 最后用
items2dict直接转换为目标结构的字典
方法2:使用循环迭代构建
如果不习惯用json_query,也可以用loop逐行合并生成目标字典:
- set_fact: formatted_a_records: "{{ formatted_a_records | default({}) | combine({item.name: {'a': item.ipv4addr}}) }}" loop: "{{ records }}"
可选优化(同域名多A记录场景)
如果存在同一个域名对应多个A记录的情况,你可以把a对应的值改为列表存储,避免后续合并被覆盖:
- set_fact: formatted_a_records: "{{ records | map('json_query', '{key: name, value: {a: [ipv4addr]}}') | items2dict }}"
后续合并其他类型记录(比如CNAME)时,直接对同域名的字典做递归合并即可。
内容的提问来源于stack exchange,提问作者Gordon
相关产品推荐
相关产品推荐

