使用 Junos PyEZ 比较候选配置和先前提交的配置
总结 使用 Junos PyEZ diff() 和 pdiff() 方法将候选配置与之前提交的配置进行比较。
Junos 设备存储最近提交的配置的副本和最多 49 个先前配置的副本。Junos PyEZ jnpr.junos.utils.config.Config 实用程序允许您将候选配置与之前提交的配置进行比较,并打印或返回差额。 表 1 概述了等效于 在 Junos OS CLI 中发出 show | compare rollback n 配置模式命令的方法。
临时配置数据库仅存储已提交的临时配置数据的当前版本,因此,它不支持将修改后的临时配置与以前提交的配置进行比较。
diff()和pdiff()方法检索候选配置与方法调用中回滚 ID 参数rb_id引用的先前提交的配置之间的差异。如果省略该参数,则回滚 ID 默认为 0,对应于活动配置。
差异以修补程序格式返回,其中:
仅存在于候选配置中的语句以加号 (+) 为前缀
仅存在于比较配置中而不存在于候选配置中的语句以减号 (-) 为前缀
如果配置之间没有差异,则方法返回或打印
None。
在 Junos PyEZ 应用程序中,与设备建立连接后,可以调用 diff() or 表对象的 or pdiff() 方法来 Config 比较候选配置和回滚配置。下面的示例使用该类将 Config 配置更改加载到候选配置中,然后在提交更改之前调用该方法 pdiff() 以打印修改后的候选配置与活动配置之间的差异。
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
with Device(host='router1.example.com') as dev:
with Config(dev, mode='exclusive') as cu:
cu.load(path='configs/junos-config-mx.conf', merge=True)
cu.pdiff()
cu.commit()
执行代码时,它会将差异打印到标准输出。例如:
[edit system scripts op]
+ file bgp-neighbors.slax;
[edit interfaces]
+ ge-1/0/0 {
+ unit 0 {
+ family inet {
+ address 198.51.100.1/26;
+ }
+ }
+ }
- ge-1/1/0 {
- unit 0 {
- family inet {
- address 198.51.100.65/26;
- }
- }
- }
若要将配置之间的差异作为对象进行检索以进行进一步操作,请调用 diff() 该方法而不是 pdiff() 方法,并将输出存储在变量中。例如:
cdiff = cu.diff(rb_id=2)
print (cdiff)
使用 Junos PyEZ 配置表和视图在设备上进行结构化配置更改时,可以通过单独调用 lock()、 commit() load()和unlock()方法加载和提交配置数据,也可以通过调用set()方法(该方法会自动调用所有这些方法)来加载和提交配置数据。如果使用配置表来配置设备,并且想要使用应用程序中的 or 方法将diff()更新的候选配置与以前提交的配置进行比较,则必须使用 load() and commit() 方法而不是set()该方法。pdiff()这样做使您能够在将配置数据加载到候选配置之后但在提交之前检索差异。例如:
from jnpr.junos import Device
from myTables.ConfigTables import UserConfigTable
with Device(host='router1.example.com') as dev:
with UserConfigTable(dev, mode='exclusive') as userconf:
userconf.user = 'user1'
userconf.class_name = 'read-only'
userconf.append()
userconf.load(merge=True)
userconf.pdiff()
userconf.commit()
以下示例将候选配置与回滚 ID 为 5 的配置进行比较,但不对配置进行任何更改:
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
with Device(host='router1.example.com') as dev:
cu = Config(dev)
cu.pdiff(rb_id=5)