使用 Junos PyEZ 配置 Junos 设备
总结 您可以使用 Junos PyEZ Config
实用程序或 Junos PyEZ 表和视图来配置 Junos 设备。
Junos PyEZ 使您能够在 Junos 设备上进行结构化和非结构化配置更改。用于进行配置更改的用户帐户必须有权更改每台设备上配置的相关部分。如果未定义用户,则用户默认为 $USER
。
以下各节比较了结构化和非结构化配置更改,并提供了在使用实用程序进行 Config
非结构化配置更改或使用表和视图进行结构化配置更改时 Junos PyEZ 配置过程的详细信息。
了解结构化和非结构化配置更改
非结构化配置更改包括加载格式化为 ASCII 文本、Junos XML 元素、Junos OS set
命令或 JavaScript 对象表示法 (JSON) 的静态或模板化配置数据,这些更改是使用该 jnpr.junos.utils.config.Config
实用程序执行的。相反,结构化配置更改使用 Junos PyEZ 配置表和视图来定义要配置的特定资源,例如 Junos OS 用户帐户。将表添加到 Junos PyEZ 框架时,Junos PyEZ 会动态为资源创建配置类,使您能够在设备上以编程方式配置该资源。
使用该实用程序在 Config
Junos 设备上进行非结构化配置更改时,可以更改配置的任何部分,但必须对配置数据使用可接受的格式之一,并且使用该格式的正确语法。熟悉受支持的配置格式并希望选择修改配置的任何部分的用户可能倾向于使用此方法进行配置更改。该 Config
实用程序还允许您回滚到先前提交的配置或加载现有的救援配置。
另一方面,结构化配置更改要求您创建表和视图来定义特定资源,并且仅允许您在设备上配置定义的资源。定义结构化资源时,可以指定用户可以为资源配置哪些配置语句,还可以定义类型和约束检查,以确保用户为其 Junos PyEZ 应用程序中的数据提供可接受的值。创建表和视图后,可以轻松地共享和重用它们。表用户可以通过编程方式在设备上配置资源,并且用户不需要了解支持的配置格式或其语法。
表 1 总结了 Junos PyEZ 支持的两种配置更改方法。
配置更改类型 |
实用 |
范围 |
配置数据格式 |
其他信息 |
---|---|---|---|---|
结构 |
表和视图 |
仅限于表和视图中定义的配置语句 |
– |
用于进行有针对性的配置更改 不需要了解配置格式或其语法 |
非 |
|
配置的任何部分 |
|
支持:
|
本主题讨论常规配置过程以及这两种配置方法共有的操作和元素。有关使用实用程序或表和视图执行 Config
配置更新的详细信息,请参阅特定于该配置方法的文档。
有关使用该 Config
实用程序进行非结构化配置更改的详细信息,请参阅下列主题:
有关使用配置表和视图进行结构化配置更改的详细信息,请参阅以下主题:
了解常规配置过程
Junos PyEZ 使您能够在 Junos 设备上进行配置更改。成功连接到设备后,根据首选配置方法创建 Config
or Table 对象,并将其与该对象关联 Device
。例如:
配置对象
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='dc1a.example.com') as dev: cu = Config(dev)
表对象
from jnpr.junos import Device from myTables.ConfigTables import ServicesConfigTable with Device(host='dc1a.example.com') as dev: sct = ServicesConfigTable(dev)
默认情况下,Junos PyEZ 会更新候选全局配置(也称为 共享配置数据库)。进行配置更改的基本过程是锁定配置数据库,加载配置更改,提交配置以使其处于活动状态,然后解锁配置数据库。使用 Junos PyEZ Config
实用程序在共享配置数据库中进行非结构化配置更改时,可以通过调用此处概述的相应实例方法来执行以下操作:
-
使用
lock()
锁定配置 -
通过执行以下操作之一修改配置:
-
加载新的完整配置或修改配置的特定部分时调用
load()
-
调用
rollback()
以恢复到以前提交的配置,如回滚配置中所述
-
-
使用
commit()
提交配置,如提交配置和使用 Junos PyEZ 提交配置中所述 -
使用 解锁配置
unlock()
如果使用表和视图在设备上进行结构化配置更改,则可以选择单独调用 lock()
、 load()
、 commit()
和 unlock()
方法,也可以调用 set()
自动调用所有这些方法的方法。
该方法 load()
对 Table 对象和 Config
对象执行相同的功能,但根据调用该方法的对象类型提供不同的参数。
如何指定配置模式
默认情况下,Junos PyEZ 会更新候选全局配置。您还可以指定在修改配置数据库时要使用的其他配置模式。要指定默认模式以外的模式,必须使用上下文管理器(with ... as
语法)创建 Config
or Table 对象,并将参数设置为mode
所需模式。支持的模式包括 private
、 exclusive
、 dynamic
batch
、 和 ephemeral
。
当您指定缺省模式以外的模式时,上下文管理器将处理打开和锁定以及关闭和解锁数据库。这可确保您不会无意中使数据库处于锁定状态。在这些情况下,只需调用 load()
和 commit()
方法来配置设备。
以下示例使用该 configure private
模式进行配置更改:
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='dc1a1.example.com') as dev: with Config(dev, mode='private') as cu: cu.load('set system services netconf traceoptions file test.log', format='set') cu.pdiff() cu.commit()
from jnpr.junos import Device from myTables.ConfigTables import ServicesConfigTable with Device(host='dc1a.example.com') as dev: with ServicesConfigTable(dev, mode='private') as sct: sct.ftp = True sct.ssh = True sct.telnet = True sct.append() sct.load() sct.pdiff() sct.commit()
上下文管理器处理在 private
、 batch
exclusive
dynamic
、 或 ephemeral
模式下打开和锁定配置数据库。因此,在其中一种模式下LockError
调用 or lock()
set()
方法会导致异常。
Junos PyEZ 允许您在支持此数据库的设备上更新 临时配置数据库 。临时数据库是一种备用配置数据库,提供用于在 Junos 设备上执行配置更新的快速编程接口。
临时配置数据库是一项高级功能,如果使用不当,可能会对设备的操作产生严重的负面影响。有关更多信息,请参阅 了解临时配置数据库。
若要打开和配置临时配置数据库的默认实例,请包含参数 mode='ephemeral'
。例如:
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='router1.example.com') as dev: with Config(dev, mode='ephemeral') as cu: cu.load('set protocols mpls label-switched-path to-hastings to 192.0.2.1', format='set') cu.commit()
若要打开和配置临时配置数据库的用户定义实例,请包含该 mode='ephemeral'
参数,并将该参数设置为 ephemeral_instance
实例的名称。
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='router1.example.com') as dev: with Config(dev, mode='ephemeral', ephemeral_instance='eph1') as cu: cu.load('set protocols mpls label-switched-path to-hastings to 192.0.2.1', format='set') cu.commit()
如何指定加载操作
在 Junos PyEZ 中,您可以使用 Junos OS CLI 中支持的许多相同加载操作来加载配置更改。通过使用表和视图进行结构化配置更改时,或者在结构化或非结构化配置更改的方法中包含load()
或省略适当的参数set()
,可以指定所需的加载操作。表 2 总结了每种负载操作所需的参数设置。
由于 和 load update
操作load override
需要完整的配置,因此overwrite=True
在使用 Tables 进行配置更改时不得使用 and update=True
参数,因为 Tables 只会修改配置中的特定语句。
负载操作 |
参数 |
描述 |
第一个受支持的 Junos PyEZ 版本 |
---|---|---|---|
|
|
将加载的配置与现有配置合并。 |
1.0 |
|
|
将整个配置替换为加载的配置。 |
1.0 |
|
|
从修补程序文件加载配置数据。 |
2.4.0 |
|
– |
将加载的配置与现有配置合并,但将现有配置中的语句替换为在加载的配置中指定 |
1.0 |
|
|
加载完整的配置并将其与现有配置进行比较。加载的配置中不同的每个配置元素都会替换其在现有配置中的相应元素。在提交操作期间,只有受已更改配置元素影响的系统进程才能解析新配置。 |
2.1.0 |
如何将配置或表对象创建为设备实例的属性
Device
类bind()
方法使您能够将Device
各种实例和方法附加到实例。在 Junos PyEZ 应用程序中,您可以选择将 or 表对象绑定Config
到Device
实例。方法的功能不会更改,但方法执行略有不同。例如:
作为独立变量:
with Device(host='dc1a.example.com') as dev: cu = Config(dev) cu.lock()
作为绑定属性:
with Device(host='dc1a.example.com') as dev: dev.bind( cu=Config ) dev.cu.lock()