Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

定义解析结构化输出的 Junos PyEZ 操作表的视图

用于结构化输出的 Junos PyEZ 操作 (op) 表从在 Junos 设备上执行的 RPC 的 XML 输出中选择特定数据。一张表格与一个视图相关联,该视图用于访问表中的字段并将其映射到用户定义的 Python 变量。您将表与特定视图相关联,方法是将属性包括 view 在表定义中,该定义将 View 名称作为其论点。

视图将用户定义的变量映射到所选表项中的 XML 元素。视图允许您以变量身份访问输出中的特定字段,并具有可在 Python 中操纵的属性。Junos PyEZ 处理将数据提取到 Python 以及任何类型的转换或数据规范化。视图中定义的密钥必须是有效的 Python 可变名称。

Junos PyEZ 视图(如表)使用 YAML 格式化。解析结构输出的视图可以包含许多参数,这些参数汇总在 表 1 中。

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

查看参数名称

视图参数

描述

查看名称

视图的用户定义标识符。

字段物品

fields

密钥值对的关联阵列或字典,用于将用户定义的字段名称映射到 XPath 表达式,在表项中选择元素。字段名称必须是有效的 Python 可变名称。

字段组

fields_group

密钥值对的关联阵列或字典,用于将用户定义的字段名称映射到 XPath 表达式,在表项中选择元素。XPath 表达式相对于相应组参数设置的上下文。字段名称必须是有效的 Python 可变名称。

groups

密钥值对的关联阵列或字典,用于将用户定义的组名称映射到 XPath 表达式(相对于表项目上下文),用于为该组中的字段设置 XPath 上下文。

请考虑以下 Junos PyEZ 操作表和视图,此表包含在 Junos PyEZ 分配中。此表提取目标设备上的以太网接口的操作状态信息。

以下部分讨论视图的不同组件:

查看名称

View 名称是用户定义的 View 标识符。您将表与特定视图相关联, view 方法是将属性包括在表定义中,并提供 View 名称作为其论点。例如:

字段(字段)

您可自定义视图,以便它们仅参考所选表项中的必要元素。为此, fields 您包括属性和关联阵列,其中包含用户定义字段名称与 XPath 表达式的映射,从表项中选择所需元素。字段名称必须是有效的 Python 可变名称。XPath 表达式相对于表项上下文。

考虑以下 RPC 输出示例:

如果表 item 参数从输出中选择 <physical-interface> 元素,则视图定义中每个字段的 XPath 表达式相对于该上下文。以下视图定义将每个用户定义的字段名称映射到该元素的 <physical-interface> 一个子元素:

在 Python 脚本中,您可以访问视图项目作为可变属性。默认情况下,每个查看项目都有一个属性,该属性引用唯一 name 标识该项的密钥。

字段格式用于确定字段值的类型。默认情况下,字段值作为字符串存储。您可以为字段映射中的字段值指定不同类型。以下示例定义了要整数的元素的价值 mtu

在 RPC 输出中,某些 Junos XML 元素只是充当标记的空元素。您可以显式地表示字段是现场映射中的一面标志。如果输出中存在该元素,并且如果没有元素,则标志的字段项目值是真实的。以下示例将元素 ifdf-running 定义为标志:

您还可以使用以下语法将字段项目值设置为布尔语法:

该元素的价值根据传递给的正则表达式进行 regex()评估。如果元素的值与表达式匹配,则字段项目值将设置为以格式定义的布尔。在以下示例中 oper_status_down ,如果元素的 oper-status 值包含“down”,则字段设置为 True:

您还可以使用更复杂的正则表达式并与多个值匹配。如果元素中的 rt-destination 地址以“198.51”开头,则以下字段项目设置为 True:

如果 no-refresh 元素在正则表达式中包含任一值,则以下字段项目设置为 True。

组(组)和字段组 (fields_)

组提供快捷键方法,用于在表项中的特定节点集中选择和参考元素。

在以下 RPC 输出中 <if-device-flags> ,该元素包含多个子元件,这些元件对应于 CLI 输出中的字段中 Device flags 显示的值:

在 View 定义中,您可以使用 fields 属性来访问儿童元素,方法是提供与所选表项目相关的每个元素的完整 XPath 表达式。例如,如果 EthPortTable 定义选择 <physical-interface> 项目,则字段项目映射将使用以下 XPath 表达式:

或者,您可以创建一个组,将上下文设置到元素, <if-device-flags> 然后定义仅提供相对于该上下文的 XPath 表达式的字段组项目。您可以在 View 定义中定义任意数量的组。

要创建组,请将属性包括在 groups 一起,并将用户定义的组名称映射到 XPath 表达式,以定义新上下文。然后定义一个字段组,其名称后面是 fields_ 组名称。字段组是一个关联阵列,包含将用户定义的字段名称映射到 XPath 表达式,而 XPath 表达式现在相对于内部 groups设置的上下文。字段名称必须是有效的 Python 可变名称。

以下示例定义组flags和相应的字段组fields_flags。该flags组将上下文设置为physical-interface/if-device-flags层次结构级别,present并且running和字段分别访问和ifdf-presentifdf-running元素的值。

无论您是使用字段还是字段组,都可使用用户定义的字段名称,以相同的方式访问 Junos PyEZ 脚本中的值。