You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ansible中遍历嵌套字典?具体场景求解

Ansible嵌套字典遍历问题解决方案

嘿,我来帮你搞定这个嵌套字典遍历的问题!咱们分两部分说,先讲通用思路,再针对你的具体场景给出纯Ansible的实现。

一、Ansible遍历嵌套字典的通用技巧

Ansible里处理嵌套字典,核心是用dict2items过滤器把字典转换成[{key: ..., value: ...}, ...]的列表结构,然后结合loop和subelements过滤器(或者嵌套的dict2items)来逐层拆解多层嵌套。这种方式完全基于Ansible内置过滤器,不需要额外写Python模块或者嵌套任务循环。

二、针对你的具体场景的实现

先回顾下你的变量结构:

vars:
  commands:
    group1:
      cmd1:
        run: foo
      cmd2:
        run: bar
    group2:
      cmd3:
        run: zoo

要得到你期望的格式,只需要用dict2items配合subelements就能实现,直接看代码:

- name: 遍历嵌套字典并输出目标格式
  debug:
    msg: "{{ item.0.key }}, {{ item.1.key }}={{ item.1.value }}"
  loop: "{{ commands | dict2items | subelements('value', skip_missing=True) }}"

代码解释:

  1. commands | dict2items:把外层的commands字典转换成键值对列表,每个元素是这样的结构:{key: 'group1', value: {'cmd1': {'run': 'foo'}, 'cmd2': {'run': 'bar'}}}
  2. subelements('value', skip_missing=True):对每个group对应的value(也就是cmd字典)做二次拆解,把它也转换成键值对列表,最终每个loop的item是一个元组:(group的键值对, cmd的键值对)
  3. 输出格式拼接:通过item.0.key拿到group名称,item.1.key拿到cmd名称,item.1.value拿到对应的run字典,组合成你要的字符串。

执行这个任务后,输出会和你期望的一致(注:你期望里的cmd4应该是笔误,实际会输出cmd3):

- group1, cmd1={'run': 'foo'}
- group1, cmd2={'run': 'bar'}
- group2, cmd3={'run': 'zoo'}

这个方案完全是纯Ansible过滤器实现,没有用到额外任务循环或Python模块,完美符合你的要求~

内容的提问来源于stack exchange,提问作者sorin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 21:09:07