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

Ansible批量重载Cisco设备时任务挂起且超时失败问题求助

解决Ansible重载多台Cisco设备时的超时挂起问题

你碰到的这个情况其实很常见——Cisco设备执行reload命令后会直接断开SSH连接,而Ansible的cli_command模块默认会等着命令执行完返回结果,这就导致模块触发了30秒的超时限制,哪怕设备已经在重启了,任务还是会报失败。批量执行时第一台设备的断开还会干扰后续任务的正常流程,出现挂起的情况。

给你两个可行的解决方案:

方案一:异步执行+等待连接恢复

修改你的任务,让Ansible发送完重载命令后立刻继续下一个任务,不用傻等返回,然后专门加一个任务等待设备重启完成:

- name: 发送重载命令到设备
  cli_command:
    command: "reload"
    prompt:
      - "Proceed with reload?"
    answer:
      - "y"
  ignore_errors: yes
  async: 60  # 给足够时间发送命令并触发重启
  poll: 0  # 立即返回,不阻塞后续任务

- name: 等待设备重启后恢复连接
  wait_for_connection:
    delay: 30  # 先等30秒再检测,给设备重启留时间
    timeout: 300  # 最多等5分钟,可根据你的设备重启时长调整

这样一来,第一台设备发送完命令就会继续处理第二台,不会因为第一台断开连接而挂起,同时wait_for_connection会确保设备重启完成后再继续后续操作(如果有的话)。

方案二:用专门的Cisco重载模块

如果你管理的是Cisco IOS/IOS-XE设备,推荐直接用ios_reload模块,这个模块是专门为Cisco设备重载设计的,内置了处理重启的逻辑,比cli_command更靠谱:

- name: 重载Cisco设备并等待恢复
  ios_reload:
    prompt: "Proceed with reload?"
    answer: "y"
    wait_for_reload: yes
    reload_timeout: 300  # 设置等待重启完成的超时时间

这个模块会自动发送重载命令、确认重启,然后等待设备重新上线,不需要手动处理超时和连接等待,批量执行时也不会出现挂起的问题。

原来的任务之所以失败,核心原因就是cli_command模块默认会等待命令执行的输出返回,但设备重启会直接断开SSH会话,模块在默认30秒超时内收不到任何返回,就会抛出超时错误,哪怕你加了ignore_errors: yes,还是会显示失败状态。

内容的提问来源于stack exchange,提问作者uncowandy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:25:14