如何使用Netmiko实现配置超时自动回滚功能
Netmiko实现配置超时自动回滚方案
执行configure terminal revert timer <分钟数>后,设备配置模式提示符会追加回滚定时器相关标记,Netmiko默认的提示符正则无法匹配变更后的提示符,会直接判定命令执行超时、流程中断,无需修改Netmiko底层源码即可解决该问题,以下是两种可直接落地的实现方式:
方案1:调用Netmiko原生封装API(优先推荐,无兼容问题)
Netmiko针对支持配置回滚的IOS/IOS-XE、NX-OS等网络设备,已经原生封装了配置确认/回滚逻辑,完全适配提示符匹配规则,版本升级不会出现兼容问题:
- 核心逻辑:不手动敲revert模式进入命令,通过公开的
commit()方法传入回滚超时参数,由Netmiko内部处理提示符适配 - 可直接复用的代码示例:
from netmiko import ConnectHandler # 设备连接参数 device = { "device_type": "cisco_ios", "host": "你的设备管理IP", "username": "登录账号", "password": "登录密码", "conn_timeout": 30, "global_delay_factor": 2, # 兜底延迟,避免慢设备响应超时 } with ConnectHandler(**device) as conn: # 进入配置模式,无需手动输入revert相关命令 conn.config_mode() # 批量下发需要执行的配置 config_list = [ "interface GigabitEthernet0/0", "ip address 192.168.10.1 255.255.255.0", "no shutdown" ] conn.send_config_set(config_list, exit_config_mode=False) # 提交配置并开启1分钟超时回滚:时间内未确认则自动恢复到配置前状态 # confirm参数单位为分钟,与设备原生revert timer参数单位一致 conn.commit(confirm=1) # 插入你的配置校验逻辑:例如检查接口状态、路由连通性、业务可用性 config_check_pass = True # 替换为实际校验结果 if config_check_pass: # 校验通过,二次提交确认配置,永久生效,取消回滚定时器 conn.commit() else: # 校验失败,主动触发立即回滚 conn.rollback()
方案2:自定义提示符匹配规则(适配多厂商场景)
如果使用的设备系统(如部分国产厂商设备)没有被Netmiko原生commit逻辑支持,可以通过修改当前连接实例的提示符匹配规则实现,该操作仅对当前会话生效,不会修改Netmiko底层源码,不影响后续版本升级:
- 操作要点:
- 建立连接后先获取设备原生基础提示符
- 发送revert命令前,更新实例的提示符匹配正则,兼容带回滚标记的特殊提示符
- 配置校验完成后手动提交确认或触发回滚
- 核心代码片段:
with ConnectHandler(**device) as conn: # 获取设备默认基础提示符,例如"CoreSW01" base_prompt = conn.find_prompt().rstrip("#>") # 更新当前会话的提示符匹配规则,兼容带(config-revert)、(config)等后缀的配置模式提示符 conn.base_prompt_pattern = rf"{base_prompt}(\(config.*?\))?[#>]" # 发送带定时器的配置模式进入命令,指定匹配的预期提示符避免卡住 conn.send_command("configure terminal revert timer 1", expect_string=rf"{base_prompt}\(config.*?\)#") # 后续正常下发配置即可,不会出现提示符匹配失败中断的问题 conn.send_config_set( ["interface Loopback0", "ip address 10.255.255.1 255.255.255.255"], exit_config_mode=False ) # 配置校验逻辑同方案1,校验通过输入"commit"确认,校验失败输入"exit"即可触发回滚 if config_check_pass: conn.send_command("commit", expect_string=rf"{base_prompt}#") else: conn.send_command("exit", expect_string=rf"{base_prompt}#")
注意事项
- 不要直接将
configure terminal revert timer x作为普通配置命令传入默认的send_config_set()方法,该方法默认仅匹配标准配置模式提示符,未提前适配必然会执行中断 - 连接超时时间建议设置为比回滚定时器时长多30%以上,避免配置校验阶段未完成时Netmiko自身先超时断开
- 多厂商场景下只需要对应调整
expect_string的正则规则,适配对应厂商回滚模式下的提示符格式即可,无需改动其他逻辑
内容的提问来源于stack exchange,提问作者Omry Sasson
相关产品推荐
相关产品推荐

