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
相关产品推荐
相关产品推荐

