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 配置表和视图在设备上配置结构化资源的常规过程和一些特定任务。

常规配置过程

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • lock()分别调用 、 load()commit()unlock() 方法

注意:

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

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

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

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

配置由固定格式关键字组成的语句

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

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

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

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

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

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

为同一语句配置多个值

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

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

要在 Junos PyEZ 应用程序中配置具有多个值的叶语句,请将相应字段的值(在视图中定义)设置为等于包含所需值的 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 配置表和视图:

要删除在“表和视图”中定义的资源的叶语句,请将与该语句对应的字段的值设置为 {'operation' : 'delete'}。以下示例删除 uid user jsmith的语句:

要从配置中删除容器,视图必须为该容器定义一个字段。在示例“表和视图”中,属性定义的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)将特定属性(如非活动属性或保护属性)应用于或除去配置语句。在 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()该方法或和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 配置表配置结构化资源时,可以通过调用set()方法或load()commit()方法加载和提交配置更改。set()commit()方法使用模块中device定义的 RPC 超时值。如果未为Devicetimeout属性配置新值,Junos PyEZ 将使用默认值 30 秒。

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