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

Ansible sros_command模块在角色中报错但单独运行正常的原因排查

问题描述

我通过Ansible角色向SROS设备发送命令,任务代码如下:

- name: invoke the sros cli
  sros_command:
    commands: ["{{item.input}}"]  
  register: sros_command_result

该任务在多命令循环中执行(因需对每个命令做额外处理,故选择单独处理而非批量发送)。已验证item.input正确,且命令以模块要求的列表格式传入,测试命令为show chassis。

已确认设备连接正常,单独调试该模块可获取正确响应,但通过角色运行时出现错误:

"Unable to decode JSON from response to exec_command('{"command": "show chassis", "prompt": null, "answer": null}'). Received 'None'."

目前无法定位报错原因(除设备未返回响应外),也不知如何调试。

排查与调试方案
  • 检查角色连接参数继承
    单独调试模块时的连接参数(如ansible_connection、ansible_network_os、ansible_user等),在角色执行时可能未正确继承。可以在任务中显式指定连接变量,或在角色defaults/main.yml中定义好这些参数,确保角色运行环境和单独调试一致。

  • 开启Ansible详细日志
    执行角色时添加-vvv或-vvvv参数,查看完整执行日志,重点关注:

    • 发送给设备的命令是否与单独调试时完全一致
    • 设备返回的原始响应内容(若存在)
    • 模块处理响应的流程细节,确认是否在某个环节丢失了响应
  • 排查循环上下文干扰
    循环执行时,前序任务可能修改了连接上下文或变量,导致后续命令执行异常:

    1. 在循环前添加连接重置任务:
      - name: Reset device connection
        ansible.builtin.meta: reset_connection
      
    2. 在循环任务中添加延迟,避免命令发送过于频繁导致设备无响应:
      - name: invoke the sros cli
        sros_command:
          commands: ["{{item.input}}"]  
        register: sros_command_result
        delay: 2
      
  • 强制指定命令输出格式
    尝试将命令改为JSON输出格式,比如show chassis | json,验证是否能正常解析,排除设备默认输出格式不兼容的问题。

  • 检查角色变量覆盖
    角色中其他任务可能修改了ansible_network_os等模块依赖变量,导致响应处理异常。可以在任务前添加调试输出确认变量值:

    - name: Verify connection variables
      ansible.builtin.debug:
        var: ansible_network_os
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:01:14