将 Ansible 与 Junos PyEZ 表结合使用,从 Junos 设备检索操作信息
使用 Ansible 操作指南中的 Junos PyEZ 表和视图从 Junos 设备检索操作信息。
模块概述
Junos PyEZ 操作 (op) 表提供了一种从复杂的操作命令输出中提取信息的简单有效的方法。瞻博网络提供了一个 Ansible 模块,该模块使您能够从 Ansible 剧本中充分利用 Junos PyEZ 操作表。 表 1 概述了该模块。
|
收藏 |
模块集 |
模块名称 |
|---|---|---|
|
|
该 table 模块不支持使用配置表和视图。
了解 Junos PyEZ 表
Junos PyEZ 是一个适用于 Python 的微框架,您可以使用它来管理和自动化 Junos 设备。Junos PyEZ 支持使用简单的 YAML 定义(称为表和视图)来检索和过滤来自 Junos 设备的操作命令输出和配置数据。
Junos PyEZ 操作 (op) 表从操作命令或 RPC 的输出中提取信息。Junos PyEZ jnpr.junos.op 模块包含一些常见 RPC 的预定义表和视图定义。您还可以创建自定义表和视图。
使用 Ansible 管理 Junos 设备时,模块 table 可以使用 Junos PyEZ 表从设备检索数据。该模块可以引用 Junos PyEZ 发行版中包含的预定义操作表和视图。该模块还可以引用驻留在 Ansible 控制节点上的用户定义的表和视图。
有关 Junos PyEZ 表和视图的常规信息,请参阅 Junos PyEZ 开发人员指南中的以下部分和相关文档:
如何将瞻博网络 Ansible 模块与 Junos PyEZ 表配合使用。
该 juniper.device.table 模块可以包含以下参数来指定要使用的 Junos PyEZ 表:
-
file- 定义 Junos PyEZ 表和视图的 YAML 文件的文件名。 -
path—(可选)包含包含“表”(Table) 和“视图”(View) 定义的 YAML 文件的目录路径。默认文件路径是预定义 Junos PyEZ 操作表的位置,这些表位于 jnpr/junos/op 目录下的 Junos PyEZ 安装路径中。 -
table—(可选)表的名称。仅当文件包含多个表定义或文件包含名称中不使用“表”的单个表定义时,才需要提供此选项。
例如,以下任务使用名为 FPCTable的自定义表检索数据,该表在 playbook 目录中的 fpc.yaml 文件中定义:
tasks:
- name: Get FPC info
juniper.device.table:
file: "fpc.yaml"
path: "{{ playbook_dir }}"
table: "FPCTable"
模块 juniper.device.table 的响应包括键 resource ,该键包含表返回的项列表。每个列表项都是一个字典,其中包含视图定义的字段名称以及从每个相应字段的数据中提取的值。
考虑 Junos PyEZ 发行版 ArpTable <get-arp-table-information>的 arp.yml 文件中以下预定义的 Table and View,ArpTable以及 ArpView。 使用选项执行 <no-resolve/> RPC,该选项等效show arp no-resolve于 CLI 命令。相应的视图提取响应中每个<arp-table-entry>项目的 MAC 地址、IP 地址和接口名称。
---
ArpTable:
rpc: get-arp-table-information
args:
no-resolve: true
item: arp-table-entry
key: mac-address
view: ArpView
ArpView:
fields:
mac_address: mac-address
ip_address: ip-address
interface_name: interface-name
以下 Ansible 操作指南执行该 juniper.device.table 模块,该模块用于 ArpTable 从 Junos 设备检索地址解析协议 (ARP) 信息。Junos PyEZ 发行版在默认目录中作为预定义的 op Table 包含在 ArpTable 内。因此,模块参数不需要包含 path 即可指定文件位置。此外, table 参数不是必需的,因为 ArpTable 在其名称中包含“Table”,并且是文件中定义的唯一 Table。
---
- name: Get ARP information
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Get ARP information using Junos PyEZ Table
juniper.device.table:
file: "arp.yml"
register: result
- name: Print response
ansible.builtin.debug:
var: result
为简洁起见,playbook 输出被截断,包括设备返回的每个 <arp-table-entry> 项的相应字段(如 ArpView 所定义)。
PLAY [Get ARP information] ****************************************************
TASK [Get ARP information using Junos PyEZ Table] *****************************
ok: [dc1a.example.net]
TASK [Print response] *********************************************************
ok: [dc1a.example.net] => {
"result": {
"changed": false,
"failed": false,
"msg": "Successfully retrieved 2 items from ArpTable.",
"resource": [
{
"interface_name": "em0.0",
"ip_address": "10.0.0.5",
"mac_address": "02:01:00:00:00:05"
},
{
"interface_name": "fxp0.0",
"ip_address": "198.51.100.10",
"mac_address": "30:7c:5e:48:4b:40"
}
]
}
}
以下 Ansible 操作指南利用预定义的 Junos PyEZ 操作表 OspfInterfaceTable来检索有关 Junos 设备上 OSPF 接口的信息。 ospf.yml 文件定义了多个 Table 和 Views,因此模块调用包含 table 用于指定要使用的 Table 的参数。
---
- name: Get OSPF information
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Get OSPF interface information
juniper.device.table:
file: "ospf.yml"
table: "OspfInterfaceTable"
register: result
- name: Print response
ansible.builtin.debug:
var: result
指定 RPC 参数
Junos PyEZ 操作表有一个可选 args 键,用于定义该表执行的 RPC 的默认命令选项和参数。应用程序使用默认选项执行 RPC,除非用户重写默认值。在 Junos PyEZ 应用程序中,您可以覆盖默认选项,或者在调用 get() 方法时将其他选项和参数传递给 RPC。
该 juniper.device.table 模块还使您能够覆盖 Table 中定义的默认选项,或使用参数将 kwargs 其他选项和参数传递给 RPC。该 kwargs 值是命令选项和值的字典。提供的参数必须得到 RPC 和执行 RPC 的设备的支持。
例如,ethport.yml 文件中预定义的 Junos PyEZ op Table EthPortTable 使用命令选项执行 <get-interface-information> media RPC。默认情况下,RPC 会返回与接口名称的给定正则表达式匹配的所有接口的信息。
EthPortTable:
rpc: get-interface-information
args:
media: true
interface_name: '[afgxe][et]-*'
args_key: interface_name
item: physical-interface
view: EthPortView
以下 Ansible 操作指南用于 EthPortTable 提取有关托管设备上接口的信息。参数包括 kwargs interface_name: "ge-1/0/0"。此参数覆盖 EthPortTable 默认值 for interface_name 并指示模块仅检索 ge-1/0/0 接口的请求字段。
---
- name: Get interface information
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: Get interface information for Ethernet interfaces
juniper.device.table:
file: "ethport.yml"
kwargs:
interface_name: "ge-1/0/0"
register: result
- name: Print response
ansible.builtin.debug:
var: result
有关 Junos PyEZ 表中默认和用户提供的命令选项和参数的更多信息,请参阅: