我在使用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命令。有些可以正常工作,有些可以返回输出,就像我们上面看到的无法运行命令的情况一样。
答案 0 :(得分:0)
我猜这是身份验证问题。尝试使用相同的凭据登录设备,然后尝试“ sh run”并查看。
如果是这种情况,并且您正在使用TACAS +进行身份验证,请检查TACAS +是否允许该帐户命令或为用户提供特权级别。
如果凭据是本地帐户,则可能需要在“ sh run”之前进一步输入启用密码。对其进行修复:
在任何命令前添加“启用”和“ {启用密码}”
-enable
-{enable password}
在所有设备中配置用户权限以避免输入密码:
Router(config)#username {username} privilege 15