使用 Junos PyEZ 提交配置
借助 Junos PyEZ,您可以在 Junos 设备上进行结构化和非结构化配置更改。连接到设备并修改配置后,您必须提交配置才能使其保持活动状态。本主题讨论如何提交配置以及 Junos PyEZ 应用程序中支持哪些提交选项。
如何提交候选配置
使用 Junos PyEZ jnpr.junos.utils.config.Config 实用程序在设备上进行非结构化配置更改时,可通过调用 Config 实例 commit() 方法提交候选配置。例如:
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
from jnpr.junos.exception import ConfigLoadError, CommitError
with Device(host='router1.example.com') as dev:
with Config(dev, mode='exclusive') as cu:
try:
cu.load(path='configs/mx_config.conf', merge=True)
cu.commit()
except (ConfigLoadError, CommitError) as err:
print (err)
要在未提交配置的情况下验证配置的语法,请调用 commit_check() 该方法以代替该 commit() 方法。
cu.commit_check()
当您使用 Junos PyEZ 配置表和视图在设备上进行结构化配置更改时,您将提交候选配置,方法是使用set()该方法自动调用、load()commit()调用和unlock()调用lock(),或者单独呼叫各种方法。例如:
from jnpr.junos import Device
from myTables.UserConfigTable import UserConfigTable
with Device(host='router1.example.com') as dev:
userconfig = UserConfigTable(dev)
# ...set the values for the configuration data...
userconfig.append()
userconfig.set(merge=True)
同样,您可以将各个方法称为以下示例:
from jnpr.junos import Device
from myTables.UserConfigTable import UserConfigTable
with Device(host='router1.example.com') as dev:
userconfig = UserConfigTable(dev)
# ...set the values for the configuration data...
userconfig.append()
userconfig.lock()
userconfig.load(merge=True)
userconfig.commit()
userconfig.unlock()
如果使用上下文管理器创建Config或表对象,并将参数设置mode为 private、 exclusive、 dynamicbatch或 ephemeral, 您仅调用load()commit()配置设备的方法。上下文管理器处理开口、锁定、关闭和解锁数据库,因此,在这些模式之一对或方法进行调用lock()unlock()set()会导致 LockError 例外。
如何指定提交选项
Junos CLI 提供了提交操作选项,例如添加提交评论或同步多个路由引擎上的配置。Junos PyEZ 支持许多相同的提交选项和一些附加选项,您可以在 Junos PyEZ 应用程序中使用这些选项,方法是将相应的参数包含在或 set() 方法论证列表中 commit() 。表 1 概述了支持的提交选项,并提供了相应的 CLI 命令。
| 提交选项论点 |
描述 |
CLI 命令 |
|---|---|---|
|
|
在系统日志文件和设备的提交历史记录中记录有关提交操作的评论。 |
|
|
|
要求在初始提交之后的指定时间范围内确认提交操作。否则,回滚到先前提交的配置。 将参数设置为 |
|
|
|
返回 XML 对象,其中包含有关提交流程的详细信息。 |
|
|
|
在两个路由引擎上同步并提交配置,即使其他路由引擎上存在开放配置会话或未提交配置更改也是如此。 |
|
|
|
忽略在提交操作期间发出的警告。 设置该论点以 |
– |
|
|
同步并提交两个路由引擎上的配置。 |
|
|
|
等待使用指定值作为超时的操作完成。 |
– |
提交评论
提交配置时,可以包括一个简短的评论来描述已提交更改的目的。要记录描述更改的评论,请根据需要在或set()方法论证列表中commit()包括comment参数和消息字符串。例如:
cu.commit(comment='Configuring ge-0/0/0 interface')
包括该 comment 参数等同于在 CLI 中发出 commit comment 配置模式命令。评论记录在系统日志文件中,并包含在设备的提交历史记录中,您可以通过在 CLI 中发出 show system commit 命令来查看。
提交确认
要要求在初始提交之后的指定时间范围内确认提交操作,请根据需要将该论点包括confirm=minutes在或set()方法论证列表中commit()。
cu.commit(confirm=15)
如果提交未在给定时间限制内得到确认,设备将自动回滚到先前提交的配置,并向所有登录用户发送广播消息。允许的范围为 1 至 65,535 分钟。您也可指定 confirm=True 使用 10 分钟的默认回滚时间。要确认提交操作,请调用 commit() 或 commit_check() 方法。
确认的提交操作可用于验证配置更改是否正常工作且不妨碍管理对设备的访问。如果更改阻止访问或导致其他错误,则自动回滚到之前的配置允许在回滚截止日期结束后访问设备。如果与设备失去连接,则必须发出 Junos PyEZ open() 方法来恢复连接。
提交详细信息
您可以查看整个提交操作的详细信息,方法是将参数包括detail=True在或set()方法论证列表中commit()。包含此参数时,该方法将返回一个 XML 对象,其中包含有关提交流程的详细信息。退还值等同于 CLI 中命令输出commit | display detail | display xml中的元素所括<commit-results>的内容。
from lxml import etree
...
commit_detail = cu.commit(detail=True)
print (etree.tostring(commit_detail, encoding='unicode'))
提交同步
如果设备具有双路由引擎,您可以在两个路由引擎上同步并提交配置,sync=True方法是将该参数包括在或set()方法论证列表中commit()。
cu.commit(sync=True)
当包含该 sync=True 参数时,设备会将本地路由引擎上存储的候选配置复制到其他路由引擎,验证报考者的语法正确性,然后在两个路由引擎上提交。要强制 commit synchronize 操作成功,即使其他路由引擎上存在开放配置会话或未提交配置更改,请使用 该 force_sync=True 参数,在同步和提交配置之前,该参数会使设备终止其他路由引擎上的任何配置会话。
cu.commit(force_sync=True)
提交和提交检查超时
RPC 的默认时间为 30 秒。大型配置更改可能超过此值,导致提交或提交检查操作超时,然后才能上传、检查和提交配置。要适应可能需要提交检查或提交时间超过默认超时间隔的配置更改,请将参数包括timeout=seconds在或 commit() set()方法论证列表中commit_check(),并将超时间隔设置为适当的值。例如:
cu.commit_check(timeout=60)
cu.commit(timeout=360)
忽略警告
当 RPC 回复包含<rpc-error>警告严重性或更高级别的元素时,Junos PyEZ 将例外RpcError。如果有必要或希望抑制RpcError针对警告而提出的例外情况,则可以包括该commit()方法的ignore_warning参数。例如:
cu.commit(ignore_warning=True)
有关使用该参数的ignore_warning详细信息,请参阅 抑制 Junos PyEZ 应用程序中针对警告提出的“抑制 RpcError 例外”。