Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

使用 Junos PyEZ 配置表在 Junos 设备上配置结构化资源

Junos PyEZ 配置 通过指定该 set 属性的表,您可以定义可用于以编程方式配置 Junos 设备的结构化资源。将结构化资源的表定义加载或导入 Junos PyEZ 应用程序后,应用程序可以在设备上配置资源。本主题讨论使用 Junos PyEZ 配置表和视图在设备上配置结构化资源的常规过程和一些特定任务。

常规配置过程

配置 Table set 属性标识配置资源的配置层次结构级别,并为视图中的字段设置 XPath 上下文。例如,下 user 表在层次结构级别定义 [edit system login] 资源:

视图中包含的字段定义用户可以为该资源配置哪些叶语句。字段可以定义默认值以及类型和约束检查。

要在设备上配置结构化资源,您必须将表加载或导入到应用程序中。然后创建一个 Table 对象,并将其与 Device 目标设备的对象相关联。例如:

要为资源的配置语句定义值,请将相应的字段名称(如视图中定义)设置为等于所需的值。

字段的默认值是, None 除非视图显式定义了该字段的默认值。如果视图为字段定义了类型或约束检查,则应用程序必须为该字段提供正确的数据类型和值,并在理想情况下处理检查失败时可能引发的任何错误。您必须始终为 Table 属性 key-field 中声明的任何键字段定义值,在本例 username中为 。

以下代码导入UserConfigTable并配置 、 userclasspassword 字段的username值。视图的password字段引用encrypted-password配置中的语句;因此,数据必须提供预加密密码。

有关更具体的配置任务的详细信息,例如使用固定格式关键字或多个值配置语句、配置语句或资源的多个实例、删除叶或容器语句,或者配置与 Junos XML 属性对应的对象属性,请参阅以下部分:

配置对象后,您必须调用该 append() 方法来构建相应的 Junos XML 配置,并将其添加到存储该 Table 对象的完整配置更改集的对象中 lxml 。配置更改仅包括那些在“视图”中定义了默认值或用户配置值的字段。保留其初始值 的 None 字段将被忽略。

生成 XML 后,该 append() 方法还会将所有字段重置为其默认值,或者 None 如果 View 未为该字段定义默认值。这使您能够在同一应用程序中配置多个对象,并确保在配置后续资源时不会无意中使用为一个资源定义的值。每次配置新资源时,都必须调用 append() 以将配置更改添加到最终更改集中。有关该 append() 方法的更多信息,请参阅 使用 append() 生成 Junos XML 配置数据

如有必要,您还可以通过调用该 reset() 方法手动重置 Table 对象的所有字段。

reset() 方法将所有字段恢复为其默认值,或者 None 如果 View 未定义默认值。该 reset() 方法仅重置字段的当前值。它不会影响包含到该点为止通过调用 append() 方法构造的配置更改的 XML。

您可以通过调用 get_table_xml() 该方法检索在应用程序中任何时候表示您的更改的 XML 配置,该方法在 查看您的配置更改中进行了详细讨论。

配置所有必要的对象并调用 append()后,您可以使用以下两种方法之一将配置更改加载到设备上的共享配置数据库中:

  • 调用set()该方法,该方法会自动调用 lock()、 、 load()commit()unlock() 方法

  • 单独调用 lock()load()commit()unlock() 方法

注意:

当您使用包含使用特定配置模式的参数的mode上下文管理器(with ... as语法)创建 Table 实例时,上下文管理器将处理打开和锁定以及关闭和解锁数据库。在这种情况下,您只需调用load()commit()和方法来配置设备。调用 lock() or set() 方法会导致LockError异常。

使用单个 set() 方法提供了简单性,但调用单个方法提供了额外的灵活性,例如当您需要在加载配置数据之后但在提交之前调用其他方法时。例如,您可能希望调用 diff() or pdiff() 方法来在加载数据后但在提交数据之前查看配置差异。或者,您可能需要调用该 rollback() 方法将候选配置重置回活动配置,而不是提交它。有关使用不同方法加载和提交配置数据的更多信息,请参阅使用 Junos PyEZ 配置 Junos 设备和 使用 Junos PyEZ 提交配置

如果大型加载和提交作可能会超时,可以通过在 or commit() method 参数列表中包含timeout参数set()来调整 RPC 超时间隔。有关详细信息,请参阅如何控制 RPC 超时间隔

指定 set 参数的配置表是一个超集,具有指定 get 参数的配置表的所有功能。您可以在 Junos PyEZ 应用程序中以相同的方式检索配置数据,无论 表 指定 set get或 。有关使用配置表检索配置数据的信息,请参阅 使用 Junos PyEZ 配置表检索配置数据

configure 由固定形式关键字组成的语句

leaf 语句是不包含任何其他语句的 CLI 配置语句。大多数叶语句为配置对象的一个特征定义一个值,形式如下:

某些 leaf 语句仅包含固定形式关键字,没有关联的变量形式值。例如, ftp 层次结构级别的 [edit system services] 语句是固定形式关键字的示例。

Junos XML API 使用空标记表示此类语句。

要在 Junos PyEZ 应用程序中配置固定形式关键字(如 ftp 下的语句 [edit system services]),请将 View 中定义的相应字段名称的值设置为等于 布尔值 True

请考虑以下视图,该 ftp 视图使用类型约束定义字段,以确保字段的值为布尔值:

要在 Junos PyEZ 应用程序中配置该 ftp 字段,请将该字段设置为等于 True

为同一个语句配置多个值

某些 Junos OS 叶语句接受多个值,这些值可以是用户定义的,也可以是从一组预定义值中提取的。CLI 表示法使用方括号将所有值括在单个语句中,如下所示:

例如,您可能需要为中继接口配置 VLAN ID 列表,如以下配置所示:

要在 Junos PyEZ 应用程序中配置具有多个值的 leaf 语句,请将相应字段的值(如视图中所定义)设置为等于包含所需值的 Python 列表。在以下示例中,该 vlan_list 字段映射到 vlan-id-list CLI 中的语句。要使用多个 VLAN ID 配置该语句,请将字段名称设置为等于 ID 列表。

注意:用于 Junos PyEZ 应用程序中字段值的 Python 列表是一个以逗号分隔的值列表。此列表将在 Junos 配置数据中转换为以空格分隔的列表。

配置同一语句的多个实例

在某些情况下,您可以使用 Junos OS 配置配置同一语句的多个实例。例如,您可以在同一协议家族下为逻辑接口配置多个地址。在以下配置代码段中,环路接口在层次结构级别配置 [edit interfaces lo0 unit 0 family inet] 了多个地址:

配置的 Junos XML 表示形式如下:

使用 Junos PyEZ 配置表管理结构化资源时,可以通过将相应的字段名称设置为等于所需值来定义配置语句的值。但是,您不能在 Junos PyEZ 应用程序中定义同一字段两次,因为第二个值将覆盖第一个值。相反,您必须将字段设置为等于值列表,Junos PyEZ 将处理到 XML 的转换。

考虑下表和视图:

以下示例代码说明了如何为 Junos PyEZ 应用程序中的环路接口配置多个地址。在这种情况下,您将字段设置为 ip_address 等于地址列表。

生成的配置为:

配置同一资源的多个实例

使用 Junos PyEZ 配置表配置结构化资源时,可能需要为同一资源配置多个对象或记录。例如,您可以同时配置多个接口或用户。要在 Junos PyEZ 应用程序中为同一结构化资源配置多个对象,您必须为一个对象的字段定义值,调用该 append() 方法,然后对每个后续对象重复此过程。

例如,要配置多个用户,请定义第一个用户的字段值,然后调用该 append() 方法。然后为第二个用户定义字段值并调用该 append() 方法。该 append() 方法为配置更改构建 Junos XML 数据,并将其添加到存储完整配置更改集的对象中 lxml 。该方法还会自动将所有字段重置为其默认值(如视图中定义),或者 None 如果字段没有定义的默认值。

以下示例配置两个用户对象并提交更改:

注意:

如果在为同一资源配置多个对象之一后未调用该 append() 方法,则第二个对象的字段值将覆盖第一个对象的字段值。

以下示例代码使用更紧凑的语法配置相同的两个用户:

删除容器或叶语句

在某些情况下,您可能需要删除配置中的容器或叶语句。使用 Junos PyEZ 配置表管理结构化资源时,可以通过将相应的字段值 {'operation' : 'delete'}设置为 来在应用程序中执行此作。删除容器或叶语句时,必须始终为所有键字段定义值,以指示删除应用于哪个对象。

请考虑以下 Junos PyEZ 配置表和视图:

要删除 Table and View 中定义的资源的 leaf 语句,请将与该语句 {'operation' : 'delete'}对应的字段值设置为 。以下示例删除 uid user jsmith的语句:

要从配置中删除容器,视图必须为该容器定义一个字段。在示例 Table and View 中,属性定义的set配置范围为 system/login。视图定义映射到system/login/user容器的字段“user'。如有必要,您可以通过此定义删除用户对象。如果未为容器定义字段,则只能删除容器内的语句,而不能删除容器本身。

要删除 Junos PyEZ 应用程序中的容器,请将容器 {'operation' : 'delete'}对应的字段值设置为 ,并定义键字段以指示要删除的对象。以下示例将从配置中删除用户 jsmith

应用程序将打印该 get_table_xml() 方法返回的 Junos XML 配置数据。标识符为“jsmith”的用户元素包含指示 operation="delete" Junos OS 从配置中移除该对象的属性。

配置与 Junos XML 属性对应的属性

某些配置模式命令(例如 deactivateprotect)将特定属性(如 inactive 或 protect 属性)应用或移除至配置语句。在 CLI 中,此属性由配置语句前面的标记表示。Junos XML 配置使用对象的 XML 属性来指示此属性。

例如,以下命令会停用给定接口。

在 CLI 中查看配置时, inactive 标记位于接口名称之前。

同样,在 Junos XML 输出中, <interface> 同一接口的元素也包含属性 inactive="inactive"

通过 Junos PyEZ 配置表,您可以在配置结构化资源时为对象定义受支持的 XML 属性。请考虑以下 Junos PyEZ 配置表和视图:

要为给定配置对象定义 XML 属性,请将其字段(由 View 定义)设置为包含该属性及其值的字典。例如,要定义接口但立即停用它,请将与元素{'inactive':'inactive'}<interface>应的字段设置为 。以下示例配置和停用给定接口:

应用程序将打印该 get_table_xml() 方法返回的 Junos XML 配置数据。标识符为“ge-1/0/2”的接口元素包含该 inactive="inactive" 属性。

要激活非活动对象,请将与非活动对象 {'active':'active'}对应的“视图”字段设置为 。

同样,要保护配置元素或从受保护元素中删除 protect 属性,请将相应的字段值 {'protect':'protect'} 设置为 或 {'unprotect':'unprotect'}。有关 Junos OS 配置中的 XML 属性的更多信息,请参阅 Junos XML 管理协议开发人员指南

使用 append() 生成 Junos XML 配置数据

使用 Junos PyEZ 配置表配置结构化资源时,需要定义资源字段的值,然后调用该 append() 方法。每次调用该 append() 方法都会生成当前更改集的 Junos XML 配置数据,并将其添加到存储完整配置更改集的对象中 lxml

调用该 append() 方法会为资源生成 Junos XML 配置数据。配置更改仅包括具有“视图”中定义的默认值或用户配置值的字段。保留其初始值 的 None 字段将被忽略。

生成 XML 后,该append()方法还会将所有字段重置为其默认值(如视图中定义),或者None如果字段没有定义的默认值。重置字段可确保在同一应用程序中配置多个对象时,不会为一个对象设置字段值,然后在对其他对象的后续调用append()中无意中使用该值。因此,您必须为每次调用 append()的所有字段定义key-field新值。

注意:

将节点追加到主配置更改集后,将无法撤消该作。

append() 方法仅将新更改添加到包含完整配置更改集的对象中 lxml 。您必须显式调用 set() 该方法或 和 load() commit() 方法才能在设备上加载和提交更改。

查看配置更改

使用 Junos PyEZ 配置表配置结构化资源时,需要定义资源字段的值,然后调用该 append() 方法。每次调用该 append() 方法都会生成当前更改集的 Junos XML 配置数据,并将其添加到存储完整配置更改集的对象中 lxml 。有时,您可能需要查看应用程序中某个时间点之前已构建的配置数据,或者可能希望在将配置更改加载到设备上后查看候选配置与活动配置之间的差异。

要检索包含更改的 Junos XML 配置数据,请调用 Table 对象的方法 get_table_xml() 。该 get_table_xml() 方法返回在应用程序中到该点为止已构造的 XML 配置。调用该 set() 方法或 and load() commit() 方法时,应用程序将在设备上加载并提交此 Junos XML 配置数据。

以下示例调用该 get_table_xml() 方法来检索配置更改,然后将它们存储在变量中 configXML 。在调用 append() 该方法之前,该 get_table_xml() 方法返回 None.因此,如果返回值不是 None,则应用程序仅序列化和打印 XML 配置数据。

get_table_xml() 方法仅返回配置更改的 Junos XML 数据。在将配置更改加载到设备上之后,您可能还希望比较候选配置和活动配置,以便在提交更改之前查看差异。

要检索差异,您可以分别调用 lock()、 、 load()commit()和 方法unlock(),并通过在加载数据后但在提交数据之前调用pdiff()该方法来查看配置差异。参数列表为空的方法pdiff()将候选配置与活动配置进行比较,并将补丁格式的差异直接打印到标准输出中。

如何控制 RPC 超时间隔

使用 Junos PyEZ 配置表配置结构化资源时,可以通过调用 method set() 或 and load() commit() 方法来加载并提交配置更改。set()commit()方法使用模块中device定义的 RPC 超时值。如果未为该Devicetimeout属性配置新值,Junos PyEZ 将使用默认值 30 秒。

较大的配置更改可能会超过默认值或配置的超时值,从而导致作超时,然后才能在设备上上传和提交配置。为了适应某些配置更改,这些更改可能需要长于默认或配置的超时间隔的加载和提交时间,请在应用程序中调用 set() or commit() 方法时将参数设置为timeout=seconds适当的值。例如: