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 设备的选定配置数据库中提取特定信息。将表定义加载或导入 Python 模块后,可以检索配置数据。

Junos PyEZ 配置指定属性的 get 表只能检索配置数据。指定 set 属性的表可以在 Junos 设备上配置资源,也可以采用与指定 get 属性的表相同的方式检索数据。

若要从特定设备检索信息,必须创建一个 Table 实例并将其与表示目标设备的对象相关联 Device 。例如:

以下各节讨论如何检索和操作数据:

检索配置项目

配置表 getset 属性标识要从配置中提取的数据。例如,以下示例表定义提取 user 配置层次结构级别的元素 [edit system login]

您可以通过调用 get() 该方法并提供任何所需的参数来检索 Python 脚本中的配置数据。

如果表定义包含required_keys参数,则必须在get()方法参数列表中为每个必需的键包括键值对。以下表定义要求get()方法参数列表包含一个user参数,该参数的值对应于层次结构级别的元素[edit system login user]name

在该方法中 get() ,必须在参数列表中包含所需的键;否则,代码将引发 ValueError 异常。以下示例请求名为“operator”的用户的配置数据:

注意:

如果参数名称带有连字符,则必须将名称中的任何短划线更改为下划线。但是,参数值是一个字符串,因此可以包含连字符。

可以包含方法namesonly=True参数以get()返回仅包含表定义的 or get set 属性中指定的层次结构级别的名称键的配置数据。

例如,假设get定义为在层次结构级别检索interfaces/interface配置数据,并且在 namesonly=True Junos PyEZ 脚本中检索数据时,请在方法中包含get()参数。在这种情况下,该方法仅返回作为层次结构级别的interfaces/interface直接子级元素中的<name>值。不会返回作为元素同<name>级元素的元素中的信息,也不会返回层次结构中较低级别的元素的数据<name>

指定配置数据库

默认情况下,Junos PyEZ 配置表从候选配置数据库中检索数据。在 Python 脚本中调用 get() 该方法以检索表数据时,可以指定该方法应改为通过传入 options 参数并将该项包含在 'database':'committed' 字典中 options 来从提交的配置数据库返回数据。

指定继承和组选项

使用方法参数列表中的参数get()检索options配置数据时,可以控制继承和组选项。该options参数采用字典,默认情况下设置为以下值,该值对返回的配置数据应用继承和组:

如果不在 Python 脚本中重新定义 options 参数,它将自动使用默认值。

inherit选项指定配置数据如何显示配置组和接口范围中定义的语句。默认情况下,将包含该'inherit':'inherit'选项,并且配置数据将从继承的标签元素的用户定义组或接口范围继承的标签元素括在继承的标签元素中,而不是单独显示 <groups><apply-groups><apply-groups-except><interface-range> 元素。要应用继承,但也包括组中定义的junos-defaults语句的标记元素,'inherit':'defaults'请在参数中使用options

若要禁用继承,请将字典值设置为空字符串。

同时包含和'inherit':'inherit''groups':'groups'选项会返回配置数据,这些数据还指示从中继承元素的配置组。从特定组继承的元素在其junos:group="source-group"开始标记中包含该属性,如以下示例所示:

若要提供对视图定义中属性的访问,可以在字段映射中包含相应的 XPath 语法。以下示例定义字段 ifgroup 并将其映射到 junos:group 接口元素 <name> 的属性:

Junos PyEZ 还提供了group运算符,这是一种访问元素属性的junos:group快捷方式。下面的示例定义字段ifgroup,该字段使用name运算符映射到group元素。在脚本中访问ifgroup时,它会引用与接口元素<name>关联的属性的值junos:group

如果元素不是从组继承的,则引用该 group 属性的字段的值为 None

访问表项

检索配置项后,可以将它们视为 Python 字典,这使您能够使用标准 Python 库中的方法访问和操作这些项。

要查看配置项名称对应的字典键列表,请调用 keys() 该方法。

可以使用 Python in 运算符验证表项中是否存在特定键。

若要查看与每个键关联的字段或值的列表,请调用该方法 values() 。该方法 values() 返回一个元组列表,其中包含视图中定义的每个字段的名称-值对。

若要查看项的完整列表(包括键和值),请调用该方法 items()

循环访问表

表支持迭代,这使您能够以与循环浏览列表或字典相同的方式遍历每个配置项。这使得快速格式化和打印所需字段变得容易。

下表定义从配置数据中提取 system/login/user 各项:

以下 Junos PyEZ 应用程序循环遍 user 历各项并打印每个用户的名称和类:

username在 UserView 中定义的 and userclass 字段分别对应于配置数据中 和 name class 元素的值。输出包括用户的名称和类。

尽管 UserView 定义了一个 username 映射到元素的 name 字段,但默认情况下,每个 View 项都有一个 name 属性,该属性引用唯一标识该项的键。因此,您还可以在此示例中使用它 user.name 来引用元素的值 name