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

Ansible with_nested嵌套循环遍历level3变量报错问题排查

错误原因
  • 第一个错误是变量引用错误:level2是列表类型,不是单值字典,直接写{{ level2.level3 }}相当于在列表对象上读取level3属性,直接触发'list object' has no attribute 'level3'报错。
  • 第二个错误是循环逻辑错误:with_nested只会对传入的多个独立列表做全量笛卡尔积,不会自动绑定level2列表中每个元素和它自身携带的level3子列表,就算修正了变量引用,也会出现不同app的level3值乱匹配的问题,得不到预期的组合结果。
正确实现

要输出所有层级的合法组合(level1所有值、每个app项、该app自己的level3值三者的全配对),用Ansible自带的过滤器组合实现即可,参考配置:

---
- hosts: localhost
  gather_facts: no
  connection: local

  vars:
    level1:
      - abc
      - def

    level2:
      - { name: "app1", level3: ["aaaa","bbbb"]}
      - { name: "app2", level3: ["eeeee"]}

  tasks:
    - name: 输出所有层级组合
      debug:
        msg: "{{ item.0 }} {{ item.1.0.name }} {{ item.1.1 }}"
      loop: "{{ level1 | product(level2 | subelements('level3')) }}"

运行后会输出所有预期的组合结果:

"msg": "abc app1 aaaa"
"msg": "abc app1 bbbb"
"msg": "abc app2 eeeee"
"msg": "def app1 aaaa"
"msg": "def app1 bbbb"
"msg": "def app2 eeeee"

实现说明:

  • subelements('level3')会遍历level2列表的每一项,自动把每个app项和它自己的level3列表里的每个值绑定成配对元组,从根源避免跨app的level3值乱匹配
  • product过滤器负责做笛卡尔积运算,把level1的所有值和前面生成的app+level3配对做全量组合,刚好得到所有需要的遍历项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:54:33