IOS_Command的无效输入结果可防止Stdout在Ansible中注册



我有一个带有Ansible的ios_command模块的问题。我正在尝试执行多个命令并将输出存储到变量。

它可以很好地工作,除非一个命令在Cisco Switch上不可用并返回"检测到的无效输入"。如果发生这种情况,则任何命令的输出均未存储到变量。

这是一个非常简单的示例:

  - name: "Running commands" 
    ios_command:
      commands:
        - show version
        - show run
    register: data_output
    ignore_errors: yes

在理想的情况下,show版本和显示运行返回可用输出,因此在data_output.stdout [0]和data_output.stdout [1]。

但是,当开关上不可用"显示运行"时,我会收到以下错误,没有存储任何内容:

TASK [Running commands] *******************************************
fatal: [40.27.254.12]: FAILED! => {"changed": false, "msg": "show run\r\n                   ^\r\n% Invalid input detected at '^' marker.\r\n\r\nR022DC3N5701>"}
...ignoring
TASK [Debug output] ************************************************************
ok: [40.27.254.12] => {
    "data_output": {
        "changed": false, 
        "failed": true, 
        "msg": "show run\r\n                   ^\r\n% Invalid input detected at '^' marker.\r\n\r\nR022DC3N5701>"
    }
}

有什么想法如何减轻这种情况?我需要在数百个开关上运行多个iOS命令。有些会正常工作,有些会像我们在上面看到的那样返回输出,而命令无法运行。

我想这是一个身份验证问题。尝试使用相同的凭据登录到设备并尝试" sh run"并查看。

如果是这种情况,并且您正在使用TACAS 进行身份验证,请检查Tacas 是否允许该帐户的命令或给用户提供特权级别。

如果凭据是本地帐户,则可能需要在" sh Run"之前进一步输入启用密码。修复它:

  1. 在任何命令之前添加"启用"one_answers" {enable password}"

    -enable
    -{enable password}
    

  2. 在所有设备中配置用户特权以避免密码:

    Router(config)#username {username} privilege 15
    

最新更新