ios_command的无效输入结果阻止stdout在ansible中注册

时间:2019-02-20 15:47:53

标签: ansible ansible-facts cisco-ios

我在使用Ansible运行ios_command模块时遇到问题。我正在尝试执行多个命令,并将输出存储到变量中。

除了当其中一个命令在Cisco交换机上不可用并返回“检测到无效输入”时,它都能正常工作。如果发生这种情况,则任何命令的输出都不会存储到变量中。

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

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

在理想情况下,show version和show run都返回可用输出,因此存储并在data_output.stdout [0]和data_output.stdout [1]上使用。

但是,当“ show run”在交换机上不可用时,我收到以下错误,并且没有任何存储:

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命令。有些可以正常工作,有些可以返回输出,就像我们上面看到的无法运行命令的情况一样。

1 个答案:

答案 0 :(得分:0)

我猜这是身份验证问题。尝试使用相同的凭据登录设备,然后尝试“ sh run”并查看。

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

如果凭据是本地帐户,则可能需要在“ sh run”之前进一步输入启用密码。对其进行修复:

  1. 在任何命令前添加“启用”和“ {启用密码}”

    -enable
    -{enable password}
    
  2. 在所有设备中配置用户权限以避免输入密码:

    Router(config)#username {username} privilege 15