Ansible合并基于VRF值拆分的两个OSPF关闭任务求助
合并基于VRF拆分的Ansible OSPF关闭任务
你可以通过动态构建命令列表的方式,把这两个根据VRF值拆分的OSPF关闭任务合并成单个任务。原有的变量和拆分任务如下:
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_command: commands: - conf t - router ospf {{ item.proc }} - shutdown when: item.vrf == 'default' with_items: "{{ proc_vrf }}" - name: Shut ospf for other vrf cisco.nxos.nxos_command: commands: - conf t - router ospf {{ item.proc }} - vrf {{ item.vrf }} - shutdown when: item.vrf != 'default' with_items: "{{ proc_vrf }}"
合并后的实现方案
利用Jinja2条件判断动态生成命令序列,单个任务即可处理两种VRF场景:
写法一:使用Jinja2模板条件
proc_vrf: [{'proc': 'T1', 'vrf': 'default'}, {'proc': 'T2', 'vrf': 'vrf_T2'}, {'proc': 'T3', 'vrf': 'default'}, {'proc': 'T3', 'vrf': 'vrf_T3'}] - name: Shut ospf for all vrfs cisco.nxos.nxos_command: commands: - conf t - router ospf {{ item.proc }} {% if item.vrf != 'default' %} - vrf {{ item.vrf }} {% endif %} - shutdown with_items: "{{ proc_vrf }}"
写法二:使用ternary过滤器(更简洁)
proc_vrf: [{'proc': 'T1', 'vrf': 'default'}, {'proc': 'T2', 'vrf': 'vrf_T2'}, {'proc': 'T3', 'vrf': 'default'}, {'proc': 'T3', 'vrf': 'vrf_T3'}] - name: Shut ospf for all vrfs cisco.nxos.nxos_command: commands: >- {{ ['conf t', 'router ospf ' ~ item.proc] + (item.vrf != 'default' | ternary(['vrf ' ~ item.vrf], [])) + ['shutdown'] }} with_items: "{{ proc_vrf }}"
两种写法的核心逻辑一致:根据item.vrf的值自动调整命令列表——当VRF为default时跳过vrf {{ item.vrf }}命令,非default VRF则自动添加该命令,实现和原两个任务完全相同的执行效果,同时简化了任务结构。
内容的提问来源于stack exchange,提问作者user17314281
相关产品推荐
相关产品推荐

