在此页面上
示例:使用 Junos PyEZ 回滚配置
Junos PyEZ 库使您能够在 Junos 设备上执行操作和配置任务。此示例使用 Junos PyEZ jnpr.junos.utils.config.Config 实用程序回滚 Junos 设备上的配置。
要求
此示例使用以下硬件和软件组件:
运行 Python 3.5 或更高版本以及 Junos PyEZ 2.0 或更高版本的配置管理服务器
启用了 NETCONF 且用户帐户配置了适当权限的 Junos 设备
为服务器和 Junos 设备上的相应用户配置的 SSH 公钥/私钥对
概述
此示例提供了一个 Python 应用程序,该应用程序使用 Junos PyEZ Config 实用程序回滚指定设备上的配置。Junos 设备存储最近提交的配置的副本和最多 49 个先前配置的副本。您可以回滚到任何存储的配置。当配置更改导致不良结果,并且您希望恢复到已知的工作配置时,这很有用。回滚配置类似于在设备上进行配置更改的过程,但不是加载配置数据,而是执行回滚,这会将整个候选配置替换为之前提交的配置。
Python 应用程序将导入处理 Device 与 Junos 设备的连接的类;用于在目标设备上执行配置模式命令的类; Config 以及模块中 jnpr.junos.exception 所需的例外,其中包含管理 Junos 设备时遇到的异常。
为目标设备创建 Device 实例后, open() 该方法将与设备建立连接和 NETCONF 会话。然后, Config 实用程序方法锁定、回滚、提交和解锁候选配置。
该方法 rollback() 有一个参数, rb_id即指定要加载的存储配置的回滚 ID。有效值为 0(对于最近提交的配置为零)到比存储的先前配置数(最大值为 49)少 1。如果在方法调用中省略此参数,则默认为 0。此示例加载具有回滚 ID 1 的配置,这是在活动配置之前提交的配置。该方法 rollback() 将配置加载到候选配置中,然后通过调用该方法 commit() 提交候选配置以使其处于活动状态。
回滚并提交配置后,应用程序将调用该方法 close() 终止 NETCONF 会话和连接。该应用程序包含用于处理异常的代码,例如 LockError 锁定配置时发生的错误和 CommitError 提交操作期间发生的错误。该应用程序还包括用于处理可能发生的任何其他异常的代码。
配置
创建 Junos PyEZ 应用程序
分步过程
要创建使用 Junos PyEZ 回滚 Junos 设备上的配置的 Python 应用程序,请执行以下操作:
导入任何必需的模块、类和对象。
from jnpr.junos import Device from jnpr.junos.utils.config import Config from jnpr.junos.exception import ConnectError from jnpr.junos.exception import LockError from jnpr.junos.exception import RpcError from jnpr.junos.exception import CommitError from jnpr.junos.exception import UnlockError
包括任何必需的变量,对于此示例,其中包括受管设备的主机名。
host = 'dc1a.example.com'
创建
main()函数定义和函数调用,并将其余语句放在定义中。def main(): if __name__ == "__main__": main()
创建类的
Device实例,并提供主机名和该特定连接所需的任何参数。dev = Device(host=host)
打开连接并与设备建立 NETCONF 会话。
# open a connection with the device and start a NETCONF session try: dev.open() except ConnectError as err: print ("Cannot connect to device: {0}".format(err)) return
创建实用程序的
Config实例。# Set up config object cu = Config(dev)
锁定配置。
# Lock the configuration print ("Locking the configuration") try: cu.lock() except LockError as err: print ("Unable to lock configuration: {0}".format(err)) dev.close() return
回滚并提交配置,并处理任何错误。
# Roll back and commit configuration try: print ("Rolling back the configuration") cu.rollback(rb_id=1) print ("Committing the configuration") cu.commit() except CommitError as err: print ("Error: Unable to commit configuration: {0}".format(err)) except RpcError as err: print ("Unable to roll back configuration changes: {0}".format(err))
解锁配置,然后结束 NETCONF 会话并关闭与设备的连接。
finally: print ("Unlocking the configuration") try: cu.unlock() except UnlockError as err: print ("Unable to unlock configuration: {0}".format(err)) dev.close() return
结果
在配置管理服务器上,查看已完成的应用程序。如果应用程序未显示预期的代码,请重复此示例中的说明以更正应用程序。
from jnpr.junos import Device
from jnpr.junos.utils.config import Config
from jnpr.junos.exception import ConnectError
from jnpr.junos.exception import LockError
from jnpr.junos.exception import RpcError
from jnpr.junos.exception import CommitError
from jnpr.junos.exception import UnlockError
host = 'dc1a.example.com'
def main():
dev = Device(host=host)
# open a connection with the device and start a NETCONF session
try:
dev.open()
except ConnectError as err:
print ("Cannot connect to device: {0}".format(err))
return
# Set up config object
cu = Config(dev)
# Lock the configuration
print ("Locking the configuration")
try:
cu.lock()
except LockError as err:
print ("Unable to lock configuration: {0}".format(err))
dev.close()
return
# Roll back and commit configuration
try:
print ("Rolling back the configuration")
cu.rollback(rb_id=1)
print ("Committing the configuration")
cu.commit()
except CommitError as err:
print ("Error: Unable to commit configuration: {0}".format(err))
except RpcError as err:
print ("Unable to roll back configuration changes: {0}".format(err))
finally:
print ("Unlocking the configuration")
try:
cu.unlock()
except UnlockError as err:
print ("Unable to unlock configuration: {0}".format(err))
dev.close()
return
if __name__ == "__main__":
main()
执行 Junos PyEZ 代码
执行应用程序
要执行 Junos PyEZ 代码,请执行以下操作:
-
在配置管理服务器上,执行应用程序。
user@server:~$ python3 junos-pyez-config-rollback.py Locking the configuration Rolling back the configuration Committing the configuration Unlocking the configuration
验证
验证配置
目的
验证配置是否已在 Junos 设备上正确回滚。
行动
登录到 Junos 设备并查看配置或配置差异以及日志文件。例如:
user@dc1a> show configuration | compare rollback 1
[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;
+ }
+ }
+ }
user@dc1a> show log messages Sep 19 12:42:06 dc1a sshd[5838]: Accepted publickey for user from 198.51.100.1 port 58663 ssh2: RSA 02:dd:53:3e:f9:97:dd:1f:d9:31:e9:7f:82:06:aa:67 Sep 19 12:42:10 dc1a file[5841]: UI_LOAD_EVENT: User 'user' is performing a 'rollback 1' Sep 19 12:42:11 dc1a file[5841]: UI_COMMIT: User 'user' requested 'commit' operation (comment: none) Sep 19 12:42:26 dc1a file[5841]: UI_COMMIT_COMPLETED: commit complete
意义
配置差异和日志文件内容指示配置已成功回滚并在设备上提交。