使用 Junos PyEZ 配置 Junos 设备
借助 Junos PyEZ,您可以在 Junos 设备上进行结构化和非结构化配置更改。用于进行配置更改的用户帐户必须有权更改每个设备上的配置的相关部分。如果未定义用户,则用户默认为 $USER
。
以下部分比较结构化和非结构化配置更改,并提供有关使用实用程序进行非结构化配置更改或使用表和视图进行结构化配置更改 Config
时的 Junos PyEZ 配置流程的详细信息。
了解结构化和非结构化配置更改
非结构化配置更改包括加载静态或模板化配置数据,格式化为 ASCII 文本、Junos XML 元素、Junos OS set
命令或 JavaScript Object Notation (JSON),均使用 jnpr.junos.utils.config.Config
实用程序执行。相比之下,结构化配置更改使用 Junos PyEZ 配置表和视图来定义要配置的特定资源,例如 Junos OS 用户帐户。将表添加至 Junos PyEZ 框架时,Junos PyEZ 会动态创建资源配置类,使您可以以编程方式在设备上配置该资源。
在 Junos 设备上使用 Config
实用程序进行非结构化配置更改时,可以更改配置的任何部分,但是您必须为配置数据使用一种接受的格式以及该格式的正确语法。熟悉受支持的配置格式并希望选择修改配置任意部分的用户可能会偏爱此方法进行配置更改。该 Config
实用程序还允许您回滚到先前提交的配置或加载现有救援配置。
另一方面,结构化配置更改要求您创建表和视图来定义特定资源,并且仅允许您在设备上配置已定义的资源。定义结构化资源时,可以指定用户可为资源配置的配置语句,还可定义类型和约束检查,以确保用户为其 Junos PyEZ 应用程序中的数据提供可接受的值。创建表和视图后,即可轻松共享和重用它们。表用户可以编程方式在设备上配置资源,并且用户不需要任何受支持配置格式或其语法的知识。
表 1 汇总了 Junos PyEZ 支持进行配置更改的两种方法。
配置更改类型 |
实用 |
范围 |
配置数据格式 |
其他信息 |
---|---|---|---|---|
结构 |
表和视图 |
仅限于表和视图中定义的配置语句 |
– |
用于进行有针对性的配置更改 不需要配置格式或其语法的知识 |
非 |
|
配置的任何部分 |
|
支持:
|
本主题讨论通用配置流程以及两种配置方法通用的操作和元素。有关使用实用程序或表和视图执行配置更新的 Config
详细信息,请参阅特定于该配置方法的文档。
有关使用 Config
公用事业进行非结构化配置更改的详细信息,请参阅以下主题:
有关使用配置表和视图进行结构化配置更改的详细信息,请参阅以下主题:
了解常规配置流程
Junos PyEZ 使您能够在 Junos 设备上进行配置更改。成功连接到设备后,根据首选配置方法创建 Config
或表对象,然后将其与 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()
方法对表对象和 Config
对象执行相同的功能,但根据调用该方法的对象类型,您可提供不同的参数。
如何指定配置模式
默认情况下,Junos PyEZ 会更新候选全局配置。修改配置数据库时,您还可以指定不同的配置模式。要指定非默认模式,必须使用上下文管理器 (with ... as
语法) 创建Config
或表对象,并将该参数设置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()
上下文管理器处理在、、exclusive
、 dynamic
batch
或ephemeral
模式下private
打开和锁定配置数据库。因此,在其中一种模式下调用lock()
或set()
方法会导致例外LockError
。
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 中支持的许多相同的负载操作来加载配置更改。在使用表和视图进行结构化配置更改时,或者在结构化或非结构化配置更改方法中包括或省略该方法中的set()
load()
相应参数,您可以指定所需的负载操作。表 2 汇总了每种类型的负载操作所需的参数设置。
load override
由于和load update
操作需要完整的配置,overwrite=True
update=True
因此在使用表进行配置更改时不得使用和参数,表仅修改配置中的特定语句。
负载操作 |
参数 |
描述 |
首次支持的 Junos PyEZ 版本 |
---|---|---|---|
|
|
将加载配置与现有配置合并。 |
1.0 |
|
|
将整个配置更换为加载配置。 |
1.0 |
|
|
从补丁文件中加载配置数据。 |
2.4.0 |
|
– |
将加载配置与现有配置合并,但将现有配置中的语句替换为在加载配置中指定 |
1.0 |
|
|
将完整加载配置与现有配置进行比较。加载配置中的每个不同配置元素将替换其现有配置中的相应元素。在提交操作期间,只有受更改配置元素影响的系统进程解析新配置。 |
2.1.0 |
如何将配置或表对象创建为设备实例的属性
通过 Device
该类 bind()
方法,您可以将各种实例和方法连接到实 Device
例。在 Junos PyEZ 应用程序中,可以选择将或表对象绑定 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()