Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

定义用于解析结构化输出的 Junos PyEZ 操作表

总结 创建自定义表,从 RPC XML 输出中选择特定项目,以便从 Junos 设备提取操作信息。

Junos PyEZ 操作 (op) 表,用于结构化输出,从在 Junos 设备上执行的 RPC 的 XML 输出中提取数据。这使您能够快速检索和查看设备的相关操作状态信息。

Junos PyEZ 表使用 YAML 进行格式化。Op 表定义可以包含许多必需参数和可选参数, 表 1 汇总了这些参数。

表 1:用于结构化输出的 Junos PyEZ 操作表中的参数

表参数名称

表参数

描述

表名

表的用户定义标识符。

RPC 命令

rpc

请求要执行的 RPC 的标记名称。

RPC 默认参数

args

(可选)RPC 的默认命令选项和参数。

RPC 可选参数键

args_key

(可选)当命令的可选第一个参数不需要特定关键字时,引用该参数。

如果不包括此属性,则必须为检索操作数据时方法参数列表中包括的 get() 可选参数指定关键字或选项名称。

表项

item

相对于元素中的 <rpc-reply> 顶级元素的 XPath 表达式,该元素选择要从数据中提取的项。

这些项将成为关联视图的参考。

表项键

key

(可选)XPath 表达式或 XPath 表达式列表,用于选择一个或多个标记,这些标记的值唯一标识不使用该元素作为标识符的 <name> 项或需要组合键的情况的表项。

如果该项使用该 <name> 元素作为标识符,则可以省略此属性。

表视图

view

用于从表项目中提取字段数据的视图。

请考虑以下 Junos PyEZ op 表, EthPortTable它包含在 Junos PyEZ 发行版中。下表提取目标设备上以太网接口的操作状态信息:

以下各节讨论该表的不同组件。

表名

表名称是表的用户定义标识符。YAML 文件或字符串可以包含一个或多个表。YAML 文档的开头必须左对齐。例如:

RPC 命令 (rpc)

用于结构化输出的 Junos PyEZ 操作表从 RPC 的 XML 输出中提取特定信息。必须在操作表定义中包含该 rpc 属性,以指定要在设备上执行的 RPC。

rpc 值是命令的 Junos XML 请求标记。例如,命令的请求 show interfaces 标签名称为 get-interface-information

可以使用以下方法之一找到请求标记:

  • | display xml rpc Junos OS CLI 中的命令之后附加选项。

  • 执行 Junos PyEZ Device 实例 display_xml_rpc('command', format='text') 方法

  • Junos XML API 资源管理器中查找命令和相应的标记

RPC 默认参数(参数)

可选 args 属性定义 RPC 的默认命令选项和参数。这些键值对列在 下 args缩进。当您在脚本中调用 get() 该方法并且不提供重写该默认值的参数时,将使用默认参数。

如果选项只是一个不需要特定值的标志,则可以通过在表定义中将True选项值设置为,将其包含在参数列表中。例如,命令映射到show interfaces mediaget-interface-information带有参数media: True的请求标记。如果选项需要值,请将参数值设置为要用作默认值的值。

注意:

如果 Junos OS 命令行界面 (CLI) 中的选项名称带有连字符,则必须将名称中的任何短划线更改为下划线。

默认情况下,Junos PyEZ 规范化所有表键和值,这将去除所有前导和尾随空格,并将内部空格字符序列替换为单个空格。要禁用表的规范化,请包含在 normalize: False 参数列表中。

RPC 可选参数键 (args_key)

如果 CLI 命令采用不需要显式指定选项名称或关键字的可选第一个参数,则可以使用 optional args_key 属性。在以下示例中,命令 show interfaces 将接口名称作为可选参数:

args_key 属性使您能够在检索操作数据时使用此可选参数,而无需显式指定关键字或选项名称。

如果在表定义中包含该 args_key 属性,则可以指定参数值,但在检索数据时省略选项名称。

如果在表定义中省略 args_key 该属性,则必须显式指定选项名称(如果要在检索数据时包括此参数)。

表项(项)

所有操作表定义中都需要的 Table item 属性标识要从 RPC 输出中提取的数据。该 item 值是相对于标记中 <rpc-reply> 用于选择所需元素的顶级元素的 XPath 表达式。这些项将成为关联视图的参考。

以下示例显示了截断的 CLI 命令输出示例:

若要从此输出中选择 <physical-interface> 元素,请包含 item 该属性并指定选择该元素的 XPath。在这种情况下, <physical-interface> 元素是顶级 <interface-information> 元素的直接子元素,值的 item XPath 表达式只是元素名称。

这些项将成为关联视图的参考。

对于相同的 RPC,不同的设备可以发出不同的输出元素。因此,项目的 XPath 可能因系统而异。该 item 属性支持使用管道 ( | ) 运算符指定隐式“或”以从多个可能的节点中进行选择。 item 当属性包含此运算符时,该 key 属性必须使用列表。例如:

表项键(键)

可选 key 属性是一个 XPath 表达式或 XPath 表达式列表,用于选择用于唯一标识表项的一个或多个标记,以用于不使用该 <name> 元素作为标识符的项或要使用组合键的情况。

在以下命令输出中,每个 <physical-interface> 元素都由其 <name> 子元素唯一标识:

如果 Table item 属性选择了<physical-interface>元素,则默认情况下要将该<name>元素用作键,则可以从 Table 定义中省略key该属性。

相反,请考虑以下命令 show route brief 输出:

选择route-table/rt元素时,没有相应的<name>元素来唯一标识每个路由条目。<name>当缺少标识符时,key属性可以指定哪个或哪些标记唯一标识每个项。在这种情况下,可以通过用作<rt-destination>键来唯一标识每个route-table/rt项目。

此外,从 Junos PyEZ 2.3.0 版开始,可以定义 key: Null 一个表来指示不需要密钥。在这种情况下,表和视图将数据作为简单字典返回,而不是带有键的嵌套字典。

表项可以由由单个元素或多个元素组成的键定义。单元素键使用简单的 XPath 表达式作为属性的值 key 。组合键由 XPath 表达式列表定义。请考虑以下表定义:

此表定义的组合键可能类似于以下内容:

如果复合键引用缺少的元素,Junos PyEZ 会将键 None中的值替换为 。

注意:

key当属性包含竖线 ( | ) 运算符时,item该属性必须使用列表。

key 属性还支持竖线 ( | ) 运算符,该运算符使表能够从多个可能的节点中进行选择。该运算符使您能够使用相同的表,即使在不同系统为同一 RPC 发出不同的输出元素的情况下也是如此。例如,此处显示以供参考的 LLDPNeighborTable 可以选择 lldp-local-interface or lldp-local-port-id 元素作为其键:

key 属性使用该 | 运算符时,RPC 回复中存在的每个键都将添加到键列表中。该运算符可用于指定隐式“or”,在不同类型的配置或版本存在不同标记名称的情况下非常有用。例如,如果 RPC 作为一个设备的标识符返回 lldp-local-interface ,而同一个 RPC 作为另一个设备的标识符返回 lldp-local-port-id ,则表会自动选择相应的键。

表视图(视图)

view 属性将表定义与特定视图相关联。视图使用 XPath 表达式将用户定义的字段名称映射到所选表项目中的元素。您可以自定义视图以仅从表项目中选择必要的元素。