Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

定义 Junos PyEZ 配置表的视图

Junos PyEZ 配置表可以从 Junos 设备的选定配置数据库中提取特定数据,也可以定义可用于以编程方式配置 Junos 设备的结构化资源。表与视图相关联,视图用于选择和引用表数据中的元素。通过将属性包含在 view 表定义中来将表与特定视图相关联,该定义将视图名称作为其参数。

视图将用户定义的字段名称映射到所选表项中的 XML 元素。视图使您能够将数据中的特定字段作为变量访问,这些变量具有可在 Python 中操作的属性。Junos PyEZ 处理将数据提取到 Python 以及任何类型的转换或数据规范化。

使用具有 get 或属性的 set 表检索配置数据时,View 字段指定应用程序应为对象检索哪些配置数据。对于包含 set 属性并定义可在设备上配置的资源的表,View 中定义的字段会限制可以为该资源配置的语句。

Junos PyEZ 视图与表一样,使用 YAML 进行格式化。与配置表关联的视图定义可以包含许多参数, 表 1 汇总了这些参数。

表 1:Junos PyEZ 配置视图参数

查看参数名称

查看参数

表类型

描述

视图名称

getset

用户定义的视图标识符。

字段项

fields

getset

键值对的关联数组或字典,用于将用户定义的字段名称映射到用于选择配置数据中的元素的 XPath 表达式。字段名称必须是有效的 Python 变量名称。XPath 表达式相对于由该表的 or set 属性定义的get上下文。

当 表作用域使用 get时,这些字段标识要从配置中提取的数据。当表作用域使用 set时,这些字段标识您可以配置或检索的元素,具体取决于操作。

字段组

fields_group

getset

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

当 表作用域使用 get时,这些字段标识要从配置中提取的数据。当表作用域使用 set时,这些字段标识您可以配置或检索的元素,具体取决于操作。

groups

getset

键值对的关联数组或字典,用于将用户定义的组名映射到 XPath 表达式,该表达式为该组中的字段设置 XPath 上下文。Xpath 表达式相对于由该表的 or set 属性定义的get上下文。

请考虑以下 Junos PyEZ 配置表和视图。 UserTable(包括属性) get 提取目标设备上用户帐户的配置数据。 UserConfigTable(包括该 set 属性)定义结构化配置资源,该资源可用于在目标设备上配置用户帐户以及检索用户帐户的配置数据。

以下各节讨论视图的不同组件:

视图名称

视图名称是用户定义的视图标识符。通过将表与特定视图相关联,可以在 view 表定义中包含属性并提供视图名称作为其参数。例如:

字段(字段)

您可以自定义视图,以便它们仅引用所选配置数据中的必要元素。为此,您需要包括fields属性和一个关联数组,其中包含用户定义的字段名称到 XPath 表达式的映射,这些表达式从配置表项中选择所需的元素。字段名称必须是有效的 Python 变量名称。XPath 表达式相对于表定义中的 or set 属性定义的get配置作用域。

使用包含 或 get set 属性的表检索配置数据时,视图中定义的字段标识要从配置中提取的语句。对于包含 set 属性并定义可在设备上配置的资源的表,字段标识可以为该资源配置的语句。您必须为配置资源的所有标识符元素显式定义字段。然后,在相应表定义的属性中 key-field 引用这些标识符字段。

请考虑以下示例配置层次结构:

如果表getset参数将作用域system/login/user定义为 ,则视图定义中每个字段的 XPath 表达式相对于该上下文。以下视图定义将用户定义的字段名称 username、 映射到userclassuid元素的<user>子元素:

如果表定义包含该set属性,则必须为唯一标识对象的任何标识符元素显式定义字段,在本例中为 <name>。Table 的属性key-field必须引用映射到对象的标识符元素的所有 View 字段。必须始终在表的 setkey-field 属性中fields定义至少一个标识符元素。

然后,在 Python 脚本中,可以将 View 项作为变量属性进行访问。

注意:

检索配置数据时,数据中包含元素的每个对象 <name> 都有一个默认 name 属性,您可以使用该属性访问该元素的值。

视图字段可以包含不同的选项,具体取决于引用该视图的表的类型。定义结构化配置资源的表 (set) 可以包括对每个字段的类型和约束检查,以确保 Junos PyEZ 应用程序在设备上配置资源时提供有效数据。检索配置数据 (get) 的表可以包括返回特定元素的属性值或指定要在应用程序中使用的数据类型的选项。 字段选项(“获取”表)字段选项(“设置”表) 分别概述了使用 getset 表时可以包含的选项。

字段选项(“获取”表)

包含 get 属性并仅从设备检索配置数据的表可以为关联视图中的字段定义许多选项或运算符。本节概述了各种选项。

字段格式确定字段值的类型。默认情况下,字段值存储为字符串。可以为字段映射中的值指定不同的类型。下面的示例将元素的值 uid 定义为整数:

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

将根据传递给 的 regex()正则表达式计算元素的值。如果元素的值与表达式匹配,则字段项的值将设置为格式中定义的布尔值。在以下示例中, superuser 如果元素的值 class 包含“超级用户”,则该字段设置为 True:

Junos PyEZ 还为配置视图中的字段提供 group 运算符。通过运算符, group 您可以访问从 Junos 配置组继承的元素的属性值 junos:group 。此值指示从中继承该元素的组。

例如,在以下配置中,remote用户继承自在层次结构级别配置[edit groups global]global配置群组。

在字段映射中包含group运算符以引用属性的值junos:group而不是元素的值。下面的示例使用group运算符定义 uidgroup and fullgroup 字段。在脚本中访问这些字段名称时,该字段将引用与 uid or full-name 元素关联的属性的值junos:group

字段选项(“设置”表)

定义结构化配置资源的set表可以包括对关联视图中每个字段的类型和约束检查,以确保 Junos PyEZ 应用程序在设备上配置资源时提供有效数据。类型检查可确保 Junos PyEZ 应用程序在为特定资源配置语句时提供正确的数据类型。约束检查使您能够为语句定义默认值,并确保应用程序为这些语句提供在正确范围内的值。本节概述了支持的类型和约束检查,这些检查作为关联视图字段的选项包含在内。

表 2表 3 分别汇总了可以为配置表视图中 set 的字段定义的类型和约束检查。类型检查是互斥的,但可以为每个字段定义多个约束检查。

表 2:“set”配置表的类型检查

type 价值

描述

例子

bool

字段仅接受或的 True 布尔值 False

enable: { 'enable' : { 'type': 'bool' } }

enum

字段仅接受列表中定义的 enum 值之一

enc : { 'encapsulation' : {'type' : { 'enum' : ['vlan-ccc','vlan-vpls'] }}}

float

字段仅接受浮点值

drift : { 'clock-drift' : { 'type' : 'float' } }

int

字段仅接受整数值

uid: { 'uid' : { 'type' : 'int' } }

str

字段仅接受字符串值

name: { 'name': {'type': 'str' } }

表 3:“set”配置表的约束检查

约束检查名称

描述

例子

default

字段的默认值。

当用户未显式配置字段时,字段使用其默认值。如果用户调用该方法 reset() 重置应用程序中的字段值,则具有定义的默认值的字段将设置为该值。

native_vlan : { 'native-vlan-id' : { 'type' : 'int', 'default' : 501 } }

maxValue

字段的最大值,基于字段 type进行解释。

native_vlan : { 'native-vlan-id' : { 'type' : 'int', 'minValue' : 0, 'maxValue' : 4094 } }

minValue

字段的最小值,基于字段 type进行解释。

native_vlan : { 'native-vlan-id' : { 'type' : 'int', 'minValue' : 0, 'maxValue' : 4094 } }

您只能为字段定义单个类型检查,但可以定义多个约束检查。因此,字段可以包含 default 值、最小值 (minValue) 和最大值 (maxValue)。

minValuemaxValue选项根据选项的值type进行解释。默认情况下,字段值为字符串。对于字符串,minValuemaxValue是字符串的最小和最大长度。对于整数和浮点数,这些值是该类型的最小值和最大值。

如果包括字段的类型或约束检查,并且用户提供的配置数据未通过检查,则 Junos PyEZ 应用程序将引发相应的 TypeError 异常, ValueError 并显示一条描述错误的消息。

组(组)和字段组 (fields_)

组提供了一种快捷方式方法,用于选择和引用表项中特定节点集中的元素。

在以下配置数据中,该 <authentication> 元素包含与用户的身份验证方法对应的子元素:

在 View 定义中,可以通过fields向相对于所选配置层次结构的每个元素提供完整的 XPath 表达式,使用该属性来访问子元素。例如,如果 Table getset属性在层次结构级别选择<user>[edit system login]元素,则字段项映射将使用以下 XPath 表达式:

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

若要创建组,请包含 groups 该属性并将用户定义的组名映射到定义新上下文的 XPath 表达式。然后定义一个字段组,其名称 fields_ 后跟组名称。字段组是一个关联数组,其中包含用户定义的字段名称到 XPath 表达式的映射,这些表达式现在相对于 中 groups设置的上下文。字段名称必须是有效的 Python 变量名称。

下面的示例定义组 auth 和相应的字段组 fields_auth。该 auth 组将上下文 system/login/user/authentication 设置为层次结构级别, password 字段引用元素的值 encrypted-password

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