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 允许您在 Junos 设备上进行结构化和非结构化配置更改。本主题讨论如何使用 jnpr.junos.utils.config.Config 实用程序进行非结构化配置更改,这些更改由格式为 ASCII 文本、Junos XML 元素、Junos OS set 命令或 JavaScript 对象标记 (JSON) 的静态或模板化配置数据组成。该 Config 实用程序还允许您回滚到以前提交的配置或恢复到挽救配置。

配置过程概述

成功连接到 Junos 设备后,要使用 Config 实用程序配置设备,请先创建一个 Config 对象并将其与 Device 实例关联。例如:

默认情况下,Junos PyEZ 会更新候选全局配置(也称为 共享配置数据库)。进行配置更改的基本过程是锁定配置数据库,加载配置更改,提交配置以使其处于活动状态,然后解锁配置数据库。使用 Junos PyEZ Config 实用程序在共享配置数据库中进行非结构化配置更改时,可通过调用此处所述的相应实例方法来执行这些作:

  1. 使用 lock() 锁定配置

  2. 通过执行以下作之一修改配置:

  3. 使用 commit() 提交配置,如提交配置并使用 Junos PyEZ 提交配置中所述

  4. 使用解锁配置 unlock()

您还可以使用上下文管理器(withas...语法)来创建Config对象实例,并且某些配置模式要求您使用对象实例。对于这些模式,Junos PyEZ 会自动锁定和解锁配置。有关详细信息,请参阅指定配置模式

使用该 load() 方法修改配置时,除了指定配置模式外,还可以指定加载作的类型、配置更改的格式以及配置数据的来源。该 Config 实用程序支持 Junos CLI 中提供的许多相同的加载作和格式。有关详细信息,请参阅:

您可以将配置数据源指定为本地服务器上的文件、目标设备上的文件或可从目标设备访问的 URL 中的文件,或者指定为字符串、XML 对象或 Jinja2 模板。有关指定配置数据源的信息,请参阅以下部分:

指定配置模式

默认情况下,当您创建Config对象且未显式指定配置模式时,Junos PyEZ 将更新候选全局配置。您还可以指定在修改配置数据库时使用的其他配置模式。要指定默认模式以外的模式,必须使用上下文管理器创建Config对象,并将参数设置为mode所需的模式。支持的模式包括 private、、exclusivedynamicbatchephemeral

注意:

您可以使用 Junos PyEZ 更新支持此数据库的设备上的 临时配置数据库 。临时数据库是一种备用配置数据库,它提供了一个快速编程接口,用于在 Junos 设备上执行配置更新。这是一项高级功能,如果使用不当,可能会对设备的运行产生严重的负面影响。有关更多信息,请参阅 了解临时配置数据库

当您指定非缺省模式时,上下文管理器将处理数据库的打开和锁定以及关闭和解锁。这样可以确保您不会无意中使数据库处于锁定状态。在这些情况下,您只需调用 load()commit() 方法来配置设备。

例如,以下代码使用 configure private 模式进行配置更改,该模式将打开候选配置的专用副本:

有关不同配置模式的更多信息,请参阅 CLI 用户指南使用 Junos PyEZ 配置 Junos 设备

指定加载作

Junos PyEZ 支持使用许多 Junos CLI 中支持的相同加载作来加载配置更改。通过在方法中Config load() 包含或省略相应的参数来指定所需的加载作。

表 1 概述了支持的加载作和相应的load()方法参数。默认情况下,Junos PyEZ 执行作load replace。若要使用其他加载作,请在方法中load()将相应的参数True设置为。

表 1:load() 和 set() 方法中指定加载作类型的参数

负载作

论点

描述

第一个受支持的 Junos PyEZ 版本

load merge

merge=True

将加载的配置与现有配置合并。

1.0

load override

overwrite=True

将整个配置替换为加载的配置。

1.0

load patch

patch=True

从修补程序文件加载配置数据。

2.4.0

load replace (默认)

将加载的配置与现有配置合并,但将现有配置中的语句替换为在已加载的配置中指定标记的 replace: 语句。如果现有配置中没有语句,则会添加已加载配置中的语句。

1.0

load update

update=True

加载完整配置并将其与现有配置进行比较。在已加载的配置中不同的每个配置元素都会替换现有配置中其对应的元素。在提交作期间,只有受更改配置元素影响的系统进程才会分析新配置。

2.1.0

下面的示例执行一项 load override 作,该作将整个候选配置替换为加载的配置,然后提交候选配置以使其处于活动状态。

指定要加载的配置数据的格式

使用 Junos PyEZ Config 实用程序,可以使用其中一种受支持的标准格式来配置 Junos 设备。您可以以字符串、文件、XML 对象或 Jinja2 Template 对象的形式提供配置数据。文件可以包含配置数据片段或 Jinja2 模板。在字符串、文件或 Jinja2 模板中提供配置数据时,支持的数据格式包括 ASCII 文本、Junos XML 元素、Junos OS set 命令和 JSON。可以通过在实用程序 load() 方法中Config显式包含format参数或向配置数据文件添加适当的扩展名来指定配置数据的格式。如果未指定格式,则默认为 XML。

注意:

从 Junos PyEZ 1.2 版开始,当您以字符串形式提供配置数据时,Junos PyEZ 会自动检测格式。

表 2 汇总了配置数据支持的格式以及文件扩展名和 format 参数的相应值。对配置数据使用 Junos XML 格式时,必须将数据括在顶级 <configuration> 标记中。

注意:

直接在 NETCONF 会话中配置设备时,无需根据需要将格式为 ASCII 文本、Junos OS set 命令或 JSON <configuration-text>的配置数据包含在、 <configuration-set>、或 <configuration-json> 标记中。

表 2:指定配置数据的格式

配置数据格式

文件扩展名

format 参数

ASCII 文本

.conf.text .txt

发短信

JavaScript 对象标记 (JSON)

.json

JSON

set Junos OS 命令

。设置

设置

Junos XML 元素

.xml

XML

注意:

overwrite当 或 update 参数设置为 True时,不能使用 Junos OS set 命令格式。

注意:

运行 Junos OS 16.1R1 或更高版本的设备支持以 JSON 格式加载配置数据。

指定配置数据的位置

Junos PyEZ 允许您将配置数据加载为字符串、文件、XML 对象或 Jinja2 Template 对象。文件可以包含配置数据片段或 Jinja2 模板。

表 3 汇总 load() 了用于传入配置数据或引用其位置的方法参数。必须始终通过在方法调用中包含 format 参数来指定数据的格式,除非使用文件扩展名指示的格式的字符串、XML 对象或文件。使用 Jinja2 模板时,请包含 template_vars 要传入所需模板变量字典的参数。

表 3:在 load() 方法中引用配置数据

参数

配置数据源

描述

format 参数要求

path

本地文件

本地配置管理服务器上包含格式为 ASCII 文本、Junos XML 元素、Junos OS set 命令或 JSON 的配置数据的文件路径。

当文件扩展名未指示数据的格式时,必须包含该 format 参数。

template

Jinja2 模板对象

预加载的 Jinja2 Template 对象。

load()方法参数列表中包含该template_vars参数以引用包含任何必需的 Jinja2 模板变量的字典。

当文件扩展名未指示数据的格式时,必须包含该 format 参数。

template_path

本地 Jinja2 模板文件

本地配置管理服务器上包含格式为 ASCII 文本、Junos XML 元素、Junos OS set 命令或 JSON 的 Jinja2 模板的文件的路径。

load()方法参数列表中包含该template_vars参数以引用包含任何必需的 Jinja2 模板变量的字典。

当文件扩展名未指示数据的格式时,必须包含该 format 参数。

url

远程文件

位于 Junos 设备上或可使用 FTP 或超文本传输协议 (HTTP) URL 从 Junos 设备访问的远程 URL 中的文件路径。

当文件扩展名未指示数据的格式时,必须包含该 format 参数。

vargs[0]

XML 对象

字符串

XML 对象或字符串,其中包含格式为 ASCII 文本、Junos XML 元素、Junos OS set 命令或 JSON 的配置数据。

在这种情况下,Junos PyEZ 会自动检测配置数据的格式, format 并且不需要该参数。

从本地或远程文件加载配置数据

Junos PyEZ 允许您从本地或远程文件加载格式为 ASCII 文本、Junos XML 元素、Junos OS set 命令或 JSON 的配置数据。

若要从配置管理服务器上的本地文件加载配置数据,请将path该方法的参数设置为 load() 该文件的绝对路径或相对路径。例如:

您还可以从位于 Junos 设备上的文件或可从 Junos 设备访问的 URL 加载配置数据。要从 Junos 设备上的文件加载配置数据,请将 url 参数设置为目标设备上文件的绝对路径或相对路径,并包括加载作所需的任何其他参数。例如:

要从远程 URL 中的文件加载配置数据,请将 url参数设置为远程文件的 FTP 位置或超文本传输协议 (HTTP) URL,并包括加载作所需的任何其他参数。例如:

有关指定 URL 的详细信息,请参阅 url Junos XML 协议 <load-configuration> 作的属性。

如果文件未使用指定要加载的配置数据的格式中列出的接受文件扩展名之一来指示配置数据的格式,则必须通过在load()方法参数列表中包含format参数来指定格式。例如:

有关从 Jinja2 模板或模板文件加载配置数据的信息,请参阅 使用 Jinja2 模板加载配置数据

从字符串加载配置数据

要从字符串加载格式为 ASCII 文本、Junos XML 元素、Junos OS set 命令或 JSON 的配置数据,请将该字符串作为第一个参数 load() 包含在方法参数列表中。Junos PyEZ 会自动检测字符串中配置数据的格式,因此在这种情况下,该 format 参数是可选的。

以下代码片段提供示例多行字符串,其中包含不同格式的配置数据以及对 load() 方法的相应调用。为清楚起见,每个示例中都显式包含可选 format 参数。在这些示例中, cu 是在目标 Junos 设备上运行的 Config 实用程序的实例。

  • 对于格式为 ASCII 文本的配置数据:

    通过提供字符串作为列表中的第一个参数来加载配置数据,并选择性地指定 format="text"

  • 对于格式化为 Junos XML 的配置数据:

    通过提供字符串作为列表中的第一个参数来加载配置数据,并选择性地指定 format="xml"

  • 对于格式化为 Junos OS set 命令的配置数据:

    通过提供字符串作为列表中的第一个参数来加载配置数据,并选择性地指定 format="set"

  • 对于使用 JSON 格式化的配置数据:

    通过提供字符串作为列表中的第一个参数来加载配置数据,并选择性地指定 format="json"

加载格式化为 XML 对象的配置数据

若要加载格式为 XML 对象的配置数据,请将该对象作为第一个参数 load() 包含在方法参数列表中,并提供任何其他必需的参数。由于配置数据的默认格式为 XML,因此无需在方法调用中显式包含该 format 参数。

下面的代码演示一个 XML 对象和对该 load() 方法的相应调用:

使用 Jinja2 模板加载配置数据

Junos PyEZ 支持使用 Jinja2 模板渲染 Junos 配置数据。Jinja 是 Python 的模板引擎,可让您从预定义的模板生成文档。模板是所需语言的文本文件,通过使用表达式和变量提供灵活性。您可以使用 Jinja2 模板以受支持的配置格式之一创建 Junos 配置数据,包括 ASCII 文本、Junos XML 元素、Junos OS set 命令和 JSON。Junos PyEZ 使用 Jinja2 模板和提供的变量字典来呈现配置数据。

Jinja2 模板提供了一种强大的方法来生成配置数据,特别是对于类似的配置节。例如,您可以创建一个模板,循环访问接口列表并为每个接口创建所需的配置语句,而不是为设备上的每个接口手动添加相同的配置语句。在 Jinja 中,块用 '{%' 和 '%}' 分隔,变量包含在 '{{' 和 '}}' 中。

以下示例 Jinja2 模板会生成配置数据,用于在逻辑单元 0 上为给定列表中的每个接口启用 MPLS,并在 MPLS 和 RSVP 协议下配置接口。

在 Junos PyEZ 代码中,Jinja2 模板变量的对应字典为:

要在 Junos PyEZ 代码中加载 Jinja2 模板,请将 template_path 参数设置为模板文件的路径,并将参数设置为 template_vars 模板变量的字典。如果不使用接受的文件扩展名来指示配置数据的格式,则必须在方法参数列表中包含该 format 参数 load()

注意:

如果要提供预加载的 Jinja2 Template 对象,则必须使用 template 该参数而不是方法参数列表中的 template_path 参数 load()

Junos PyEZ 使用 Jinja2 模板和变量字典呈现以下配置数据,然后将这些数据加载到候选配置中并在设备上提交:

以下视频展示了一个简短的 Python 会话,演示了如何使用 Jinja2 模板配置 Junos 设备。

有关 Jinja2 的更多信息,请参阅 https://jinja.palletsprojects.com/en/stable/ 上的 Jinja2 文档。

回滚配置

Junos 设备会存储最近提交的配置和最多 49 个以前配置的副本,具体取决于平台。您可以回滚到任何存储的配置。当配置更改导致不希望的结果,并且您希望恢复为已知的工作配置时,这将非常有用。回滚配置类似于在设备上进行配置更改的过程,但执行回滚,而不是加载配置数据,这会将整个候选配置替换为之前提交的配置。

使用 Junos PyEZ jnpr.junos.utils.config.Config rollback() 方法,可以在 Junos 设备上回滚配置。若要回滚配置,请调用 rollback() 该方法,并将参数设置为 rb_id 回滚配置的 ID。有效 ID 值为 0(对于最近提交的配置为零),比之前存储的配置数(最大值为 49)少 1。如果在方法调用中省略此参数,则默认为 0。

以下示例提示输入要还原的配置的回滚 ID,回滚配置,打印配置差异,然后提交配置,使其成为设备上的活动配置。

有关包含错误处理的更广泛示例,请参阅 示例:使用 Junos PyEZ 回滚配置

加载救援配置

救援配置允许您定义已知的工作配置或具有可随时还原的已知状态的配置。当需要恢复到已知配置时,或者在路由器或交换机配置以及备份配置文件损坏而无法修复时,作为最后的手段,您可以使用救援配置。创建挽救配置时,设备会将最近提交的配置另存为挽救配置。

使用 Junos PyEZ jnpr.junos.utils.config.Config 实用程序可以管理 Junos 设备上的救援配置。创建类的Config实例后,使用 rescue() 该方法管理挽救配置。通过将方法action参数设置为rescue()所需的作,可以指定要对救援配置执行的作。

要将现有救援配置加载到候选配置中,请指定 action="reload"。如果不存在救援配置,则加载作将返回 False。加载救援配置后,必须提交配置,使其成为设备上的活动配置。

以下示例加载并提交救援配置(如果存在):

有关创建、检索或删除挽救配置的信息以及其他示例,请参阅 使用 Junos PyEZ 管理 Junos 设备上的挽救配置

提交配置

修改配置后,您必须提交配置,使其成为设备上的活动配置。使用 Config 实用程序在设备上进行非结构化配置更改时,需要通过调用 commit() 该方法来提交候选配置。

有关 Junos PyEZ 脚本中的提交作和支持的提交选项的更多信息,请参阅 使用 Junos PyEZ 提交配置

变更历史表

是否支持某项功能取决于您使用的平台和版本。使用 功能浏览器 查看您使用的平台是否支持某项功能。

释放
描述
1.2
从 Junos PyEZ 1.2 版开始,当您以字符串形式提供配置数据时,Junos PyEZ 会自动检测格式。