syedur_rahman.vrf_command

vrf_command

Ansible Galaxy

这个 Ansible 网络角色提供了能够动态发送VRF感知的网络命令到网络设备的功能。目前它支持 IOS / EOS / NXOS 设备。

该角色旨在增强以下模块的默认行为:

  • ios_command
  • nxos_command
  • eos_command

演示

请参见示例剧本 2,了解该示例演示的剧本详细信息。

示例剧本 2

需求

无。

角色变量

以下值应根据你的需求进行更新(请查看 defaults/main.yml):

vrf_command_list:
  - "show ip route vrf <vrf>"
  - "show version"

vrf_command_list 应更新为包含你希望在网络设备上运行的所有命令。要使显示命令以VRF感知的方式运行,应该使用语法 <vrf>,如上所示。

命令中的 <vrf> 将被设备上可用的 VRF 替代,包括全局表。例如,如果设备现有 VRF devprod,则 show ip route vrf <vrf> 命令将动态展开为以下内容:

  • show ip route
  • show ip route vrf dev
  • show ip route vrf prod

请注意,你也可以通过此角色运行常规非 VRF 相关的命令。

输出变量

该角色生成一个名为 vrf_command_output 的自定义输出变量,以方便用户使用。

数据结构的格式如下:

vrf_command_output:
  - command: "show ip route vrf dev"
      failed: False
      output: "...77.77.77.0 is directly connected, FastEthernet1/0\n..." (省略)
  - command: "show blah blah"
      failed: True
      output: "...% Invalid input detected at..." (省略)

数据结构返回一个值的列表。每个列表项中有三个键。

  • command - 针对网络设备运行的显示命令。
  • failed - 布尔值,其中 true 表示命令失败,false 表示命令成功执行。
  • output - 显示命令的输出。

示例剧本 1

以下示例剧本演示了该角色的基本用法。

- hosts: all

  vars:
    vrf_command_list:
      - "show ip interface brief vrf <vrf>"
      - "show ip route vrf <vrf>"
      - "show interface status"
      - "show version"
      
  roles:
      - syedur_rahman.vrf_command

示例剧本 2

以下示例剧本演示如何处理 vrf_command_output 以输出到文本文件。

- hosts: all

  vars:
    vrf_command_list:
      - "show ip route vrf <vrf>"
      
  roles:
    - syedur_rahman.vrf_command

- hosts: localhost

  tasks:
  - template:
      src: "show_command.j2"
      dest: "{{ item }}.txt"
    loop: "{{ groups['all'] }}"

以下是 show_command.j2 模板。

{% for show_command_info in hostvars[item]['vrf_command_output'] %}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{{ show_command_info['command'] }}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{{ show_command_info['output'] }}
{% endfor %}

这将为每个设备生成如下类型的输出文件。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
show ip route vrf management
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
IP 路由表 VRF "management"
'*' 表示最佳单播下一跳
'**' 表示最佳多播下一跳
'[x/y]' 表示 [优先级/度量]
'%<string>' 在输出中的表示 VRF <string>

192.168.12.0/24, ubest/mbest: 1/0, 附加
    *via 192.168.12.135, mgmt0, [0/0], 05:12:12, 直接
192.168.12.135/32, ubest/mbest: 1/0, 附加
    *via 192.168.12.135, mgmt0, [0/0], 05:12:12, 本地

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
show ip route
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
IP 路由表 VRF "default"
'*' 表示最佳单播下一跳
'**' 表示最佳多播下一跳
'[x/y]' 表示 [优先级/度量]
'%<string>' 在输出中的表示 VRF <string>

2.2.2.0/24, ubest/mbest: 1/0, 附加
    *via 2.2.2.2, Lo100, [0/0], 05:12:28, 直接
2.2.2.2/32, ubest/mbest: 1/0, 附加
    *via 2.2.2.2, Lo100, [0/0], 05:12:28, 本地
2.3.4.0/24, ubest/mbest: 1/0, 附加
    *via 2.3.4.5, Lo23, [0/0], 05:12:28, 直接
2.3.4.5/32, ubest/mbest: 1/0, 附加
    *via 2.3.4.5, Lo23, [0/0], 05:12:28, 本地

许可协议

MIT

作者信息

该角色由 Syedur Rahman 于 2020 年创建。

安装
ansible-galaxy install syedur_rahman.vrf_command
许可证
mit
下载
87
拥有者
A network engineer with a passion for all things automation.