Ansible遍历字典列表配置FortiOS BGP邻居问题求助
解决Ansible配置FortiOS BGP邻居时覆盖的问题
你的问题出在循环调用模块的方式:现在的写法会执行4次fortios_router_bgp模块,每次都给neighbor传一个单元素列表。FortiOS的这个模块在执行时会替换整个BGP配置中的邻居列表,所以每次执行都会覆盖之前的配置,最后只剩最后一次循环的邻居。
正确的做法是一次性构建完整的邻居列表,只调用一次模块,具体修改如下:
修改后的任务代码
- name: Configure BGP with all neighbors fortios_router_bgp: vdom: "FG-traffic" router_bgp: as: "{{ as }}" router_id: "{{ router_id }}" # 将公共参数与每个邻居的配置合并,生成完整的邻居列表 neighbor: "{{ bgp_neighbors | map('combine', common_neighbor_params) | list }}" # 定义所有邻居共用的参数,集中管理更方便 vars: common_neighbor_params: holdtime_timer: "{{ holdtime_timer }}" keep_alive_timer: "{{ keep_alive_timer }}" tags: bgp
原理说明
- 使用
map('combine', common_neighbor_params)过滤器,把bgp_neighbors里的每个邻居字典,和公共参数(holdtime_timer、keep_alive_timer)合并,生成包含所有字段的完整邻居配置。 - 最后用
list过滤器把结果转成列表,直接传给neighbor字段,模块一次调用就会配置全部4个邻居,不会出现覆盖问题。
额外提示
确保变量netid_bgp、as、router_id、holdtime_timer、keep_alive_timer都已正确定义,避免渲染错误。
内容的提问来源于stack exchange,提问作者LateStarter
相关产品推荐
相关产品推荐

