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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:55:23