在此页面上
示例:使用 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
意义
配置差异和日志文件内容指示配置已成功回滚并在设备上提交。