Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

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

总结 创建自定义表,从 CLI 或 vty 命令输出中选择数据,以从 Junos 设备提取操作信息。

Junos PyEZ 操作 (op) 表,用于从在 Junos 设备上执行的 CLI 命令或在给定灵活 PIC 集中器 (FPC) 上执行的 vty 命令的文本输出中提取数据。然后将提取的数据转换为 JSON。这使您能够快速检索和分析设备的操作状态信息。当您需要解析无法以结构化格式(如 XML)返回的命令输出时,用于非结构化输出的 Junos PyEZ 操作表特别有用。

本主题讨论表的不同组件。

操作表中用于解析非结构化输出的参数摘要

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

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

表参数名称

表参数

描述

表名

表的用户定义标识符。

命令

command

要执行的 CLI 或 vty 命令。

命令参数

args

(可选)将命令定义为 Jinja 模板时, args 是键值对的关联数组或字典,用于将命令模板中的变量映射到呈现模板时使用的默认值。

目标 FPC

target

(可选)在其上执行 vty 命令的灵活 PIC 集中器 (FPC)。

表项

item

(可选)定义如何将输出拆分为多个部分的字符串或正则表达式。这些部分将成为关联视图的可迭代参考。

指定“*”以提取并匹配整个字符串,而不是每一行。

表项键

key

(可选)字符串或字符串列表,用于定义唯一标识每个表项的一个或多个键。

所选键

key_items

(可选)要为其返回数据的一个或多个表项键的列表。

章节标题

title

(可选)选择包含要分析的数据的输出部分的字符串。

字段分隔符

delimiter

(可选)分隔符,用于定义如何在由键值对组成的命令输出中拆分数据。提取的数据作为键值对存储在字典中。

评估表达式

eval

(可选)一个或多个键值对的关联数组或字典,用于将用户定义的键映射到包含数学表达式的字符串。检索数据时,将使用 Python eval 函数计算表达式。键和计算值将添加到表和视图返回的最终数据中。

表视图

view

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

文本FSM 模板

use_textfsm

(可选)指定是否使用 TextFSM 模板分析数据的布尔值。

文本FSM 模板平台标识符

platform

(可选)使用 TextFSM 模板时,请指定模板的平台。

表名

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

命令

用于非结构化输出的 Junos PyEZ 操作表可从 CLI 或 vty 命令的文本输出中提取数据。您必须在表定义中包含该 command 属性,以指定要在设备上执行的 CLI 命令或要在给定 FPC 上执行的 vty 命令。您可以将命令定义为简单字符串或 Jinja 模板。

例如,下表在设备上执行 show chassis fan 命令。

下表在 show cmerror module brief 目标 FPC 上执行 vty 命令。

将命令定义为 Jinja 模板时,还必须为args参数提供键值对字典,用于将模板中的变量映射到呈现模板时使用的值。有关将命令定义为 Jinja 模板的信息,请参阅命令参数 (args)。

命令参数(参数)

您可以使用 Jinja 模板为参数定义 CLI 或 vty 命令 command ,并用变量替换命令参数。使用 Jinja 模板时,还必须定义 args 参数,该参数是键值对的字典,用于将 Jinja 模板中的变量名称映射到呈现模板时使用的值。您可以在表定义中为模板变量提供默认值,也可以在 Junos PyEZ 应用程序中定义这些值。

若要定义模板变量的默认值,请在表定义中包含该 args 参数,并将每个模板变量映射到其默认值。下表使用具有一个变量 的 protocolJinja 模板定义了一个命令。该 args 参数定义 的 protocol默认值,当您在脚本中调用 get() 该方法并且不提供覆盖该默认值的参数时,将使用该值。

此外,还可以在 args Table 的方法中将参数定义为字典, get() 以便:

  • 为表中未定义默认值的任何模板变量定义值

  • 覆盖表中为一个或多个模板变量定义的默认值

以下示例使用协议“bgp”而不是默认值“ospf”执行上表中的命令。

目标 FPC (FPC)

Junos PyEZ 操作表可以在特定的灵活 PIC 集中器 (FPC) 上执行 vty 命令。使用 vty 命令时,表必须包含target用于定义目标 FPC 的参数。您可以设置为targetNull并强制用户在应用程序中指定目标 FPC,也可以设置为target默认 FPC,用户可以选择性地在应用程序中覆盖此值。

下表执行 show memory vty 命令,但设置 target: Null,这要求用户在 Junos PyEZ 应用程序中提供目标 FPC:

下表在 show memory FPC 1 上执行 vty 命令,除非用户在 Junos PyEZ 应用程序中覆盖此值。

在 Junos PyEZ 应用程序中,要定义目标 FPC 或覆盖表中定义的默认 FPC,请将表中get()方法中的参数设置为target所需的 FPC,例如:

表项(项)

可选的 Table item 属性是一个字符串或正则表达式,用于定义如何拆分命令输出以进行分析。如果输出具有类似的重复数据集,则可以定义 item 匹配和提取数据的每次迭代。例如, 返回 show interfaces 许多接口的一组类似数据。或者,您可以定义 item: '*' 何时需要将数据提取为单个文本块。

请考虑 vty 命令的 show devices local 以下输出:

下表提取了以 开头 TSEC Ethernet Device Driver:的输出的每个部分。在这种情况下,的值 key: name 派生自 中 item定义的正则表达式中的捕获组。

如果要匹配输出的整个部分而不是匹配每一行,也可以定义为item星号 ('*')。如果包括 item: '*',则在大多数情况下,还必须包含参数以title指定要提取的输出部分的标题。当您在视图中包含regex参数并希望每个表达式与整个文本字符串匹配时,使用 提取item: '*'输出非常有用。否则,regex表达式将组合并匹配每一行。

下表提取标题 Receive: 下的文本块,并将每个正则表达式与整个文本字符串进行匹配:

表项键(键)

可选 key 属性定义用于唯一标识表项的输出字段。您可以使用单个键或键列表标识表项。如果表和视图返回迭代数据, key 则该值必须引用视图中定义的变量或字段名称。

请考虑以下 show chassis fan 输出:

下表将表项键 fan-name定义为 ,它映射到输出中列下 Item 的值。

在 Junos PyEZ 应用程序中检索和打印数据时,生成的字典中的每个项目都使用此字段的值作为其键。

还可以定义为 key 列表,以使用组合键标识表项。例如:

所选键 (key_items)

key 参数定义唯一标识表项的输出字段。在表中包括 key 参数时,可以使用可选 key_items 参数仅返回某些键值的数据。 key_items 定义要为其检索数据的 Table 项的键或键列表。您可以在表定义或 Junos PyEZ 应用程序中定义 key_items 参数。

请考虑以下 show chassis fan 输出:

下表将表项键 fan-name 定义为且仅检索键值等于 Fan 1的表项的数据。

在 Junos PyEZ 应用程序中,要定义key_items要返回或覆盖表中定义的,key_items请将表方法get()中的参数设置为key_items所需项的列表或元组,例如:

章节标题(标题)

表可以包含可选 title 参数,用于定义命令输出中要从中提取和分析数据的部分的起点。当表定义 item: '*'时,必须包括 title 以指定要提取的输出部分的标题

例如,请考虑以下命令输出,它包含在一组较大的输出中:

下表使用该参数从 title 输出部分提取 TSEC status counters 和分析数据。在这种情况下,表定义为 item “*”,它将数据视为单个文本字符串。

字段分隔符(分隔符)

某些操作命令返回仅由键值对组成的输出。如果只想检索整个数据集并提取每个键值对,则可以使用该 delimiter 参数来定义如何拆分每个数据对,而不是定义单独的 View。Junos PyEZ 使用分隔符在指定边界处拆分数据,并将每个键值对存储在字典中。

请考虑 vty 命令的 show link stats 以下输出。

下表将分隔符定义为冒号 (:) 字符:

在 Junos PyEZ 应用程序中检索数据时,表会在分隔符处拆分输出的每一行,并将键值对存储在字典中。

评估表达式 (eval)

您可以使用可选 eval 参数在表视图返回的最终数据中添加或修改键值对。该 eval 参数将键名称映射到包含由 Python eval 函数计算的数学表达式的字符串。您可以在表和视图中包含 eval 参数,并且可以 eval 定义和计算多个值。

在表中使用 eval 时,它会引用用于计算的完整数据字典,并且键和计算值将作为单个附加项添加到字典中。在视图中使用 eval 时,表达式将在数据的每次迭代时计算,并将计算值添加到该迭代的数据中。 eval 如果键名称与视图中定义的键匹配, eval 则将该键的值替换为计算值。 eval 如果键名称与视图中定义的键不匹配, eval 则会将新键和计算值添加到数据中。

表达式 eval 可以引用视图返回的 data 字典。表达式必须使用 Jinja 模板变量进行引用 data ,以便 Junos PyEZ 可以在计算表达式时将变量替换为字典。

下面的示例在 eval 表定义中使用在数据字典中包含单个附加条目。添加项的键为 cchip_errors_from_lkup_chip,其值是中断数的总和。

您还可以在表中定义 eval 以计算和添加多个键值对,例如:

有关在视图中使用eval的信息,请参阅评估表达式 (eval)。

表视图(视图)

view 属性将表定义与特定视图相关联。视图定义应如何解析表输出,并将用户定义的 Python 变量名称映射到所选表项中的输出字段。您可以自定义视图以仅从表项目中选择某些字段。

如果输出仅包含键值对,则可以使用 Table 的 delimiter 参数提取数据并将键值对存储在字典中。在这种情况下,您不需要定义单独的视图。

文本FSM 模板(平台和use_textfsm)

Junos PyEZ 表可以引用 TextFSM 模板来解析来自瞻博网络设备或其他供应商设备的命令输出。必须在 Junos PyEZ 服务器或虚拟环境中安装 ntc-templates 库,才能在表中使用 TextFSM 模板。

若要使用 TextFSM 模板分析命令输出,请包含在use_textfsm: True表中。您可以单独使用 TextFSM 模板,也可以与 Junos PyEZ View 结合使用。Junos PyEZ 使用和command值来确定platform模板的文件名。

例如,下表使用 juniper_junos_show_arp_no-resolve.textfsm 模板解析来自瞻博网络 Junos 设备的命令输出:

有关将 Junos PyEZ 表与 TextFSM 模板配合使用的详细信息,请参阅 将 Junos PyEZ 表与 TextFSM 模板配合使用