Ansible中如何合并两个索引对齐的字典列表生成目标结构
你已经通过zip过滤器完成了两个列表的索引对齐,接下来只需对每组配对的字典执行合并操作,再按需求包裹为单元素数组即可,以下是两种实现方案:
方案1:过滤器链式调用(简洁写法)
依赖Ansible自带的combine过滤器和json_query过滤器(需提前安装jmespath依赖包):
- name: 合并服务器与密码信息生成目标结构 set_fact: looped: "{{ server.results | zip(password) | map('combine') | map('json_query', '[@]') | list }}"
如果不需要每个字典单独包裹为小数组,删除末尾的| map('json_query', '[@]')即可。
方案2:循环实现(兼容性更好,无额外依赖)
适合不希望安装额外依赖的场景,直接通过循环逐组处理:
- name: 循环合并服务器与密码信息 set_fact: looped: "{{ looped | default([]) + [ [ item.0 | combine(item.1) ] ] }}" loop: "{{ server.results | zip(password) | list }}"
验证输出
执行后通过debug即可看到符合预期的结果:
- name: 输出合并后结果 debug: var: looped
内容的提问来源于stack exchange,提问作者Yashneet Grover
相关产品推荐
相关产品推荐

