Jinja For Loop重复输出问题求助:基于YAML生成网络配置
问题分析与解决
问题根源
你当前的Jinja模板用for循环遍历underlay[inventory_hostname]['MLAG'],但这个字段的值是字符串"Odd"。在Jinja中,遍历字符串会逐个迭代它的每个字符,"Odd"包含3个字符('O'、'd'、'd'),所以循环执行了3次。每次迭代的字符都不等于完整的"Odd",因此每次都输出else分支的内容,导致重复3行。
修复方案
不需要使用for循环,直接判断MLAG字段的取值即可:
{% if underlay[inventory_hostname]['MLAG'] == 'Odd' -%} neighbor 192.168.255.1 peer group LEAF_Peer {%- else %} neighbor 192.168.255.2 peer group LEAF_Peer {% endif %}
如果想让代码更清晰,也可以先把取值存为变量:
{% set mlag_type = underlay[inventory_hostname]['MLAG'] -%} {% if mlag_type == 'Odd' -%} neighbor 192.168.255.1 peer group LEAF_Peer {%- else %} neighbor 192.168.255.2 peer group LEAF_Peer {% endif %}
这样只会根据MLAG的实际取值生成单条配置语句,完全符合你的预期。
验证效果
- 当
MLAG值为"Odd"时,输出:neighbor 192.168.255.1 peer group LEAF_Peer - 当
MLAG值为"Even"时,输出:neighbor 192.168.255.2 peer group LEAF_Peer
内容的提问来源于stack exchange,提问作者3xiste
相关产品推荐
相关产品推荐

