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

Ansible遍历列表项时条件判断报错,如何修复?

Ansible Playbook报错修复方案

核心错误原因与修复

你遇到的报错是因为Jinja2模板中条件判断使用了单个等号=,在Ansible的模板语法里,=是赋值操作符,判断相等必须用双等号==。

虽然你贴出的playbook里when条件写的是item.vrf|lower == 'default',但报错信息显示实际执行时的条件用了item.vrf = 'default',请确保所有条件判断都使用双等号:

# 正确的相等判断
when: item.vrf|lower == 'default'
# 正确的不等判断
when: item.vrf|lower != 'default'

额外语法错误修复

你的第二个任务里parents字段存在变量引用错误:vrf {{ proc_vrf }}中的proc_vrf是整个列表变量,应该引用当前循环项的item.vrf,否则会把整个列表内容插入到配置里,导致无效命令:

# 修正后的parents字段
parents: router ospf {{ item.proc }}; vrf {{ item.vrf }}

完整修正后的Playbook

proc_vrf: [{'proc': 'T1', 'vrf': 'default'}, {'proc': 'T2', 'vrf': 'vrf_T2'}, {'proc': 'T3', 'vrf': 'default'}, {'proc': 'T3', 'vrf': 'vrf_T3'}]

- name: Shut ospf for default vrf
  cisco.nxos.nxos_config:
    lines:
    - shutdown
    parents: router ospf {{ item.proc }}
    save_when: modified
  when: item.vrf|lower == 'default'
  with_items: "{{ proc_vrf }}"

- name: Shut ospf for other vrf
  cisco.nxos.nxos_config:
    lines:
    - shutdown
    parents: router ospf {{ item.proc }}; vrf {{ item.vrf }}
    save_when: modified
  when: item.vrf|lower != 'default'
  with_items: "{{ proc_vrf }}"

注意:Ansible对YAML缩进要求严格,确保所有层级使用统一的缩进(建议2个空格),原playbook中任务的缩进存在不规范的地方,已在修正版中统一调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:25:21