我有一个带有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"之前进一步输入启用密码。修复它:
-
在任何命令之前添加"启用"one_answers" {enable password}"
-enable -{enable password}
-
在所有设备中配置用户特权以避免密码:
Router(config)#username {username} privilege 15