You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:15:30