尝试运行简单的failed_when check ::
- name: JunOS Commands
junos_command:
commands:
- show version
provider:
username: zgould
register: results
failed_when: '"[12.3R12.4]" in results.stdout'
! ! 调试输出::
"stdout": [
"fpc0:\n--------------------------------------------------------------------------\nHostname: KC2-SWI-SalesCloset\nModel: ex2200-48p-4g\nJUNOS Base OS boot [12.3R12.4]\nJUNOS Base OS Software Suite [12.3R12.4]\nJUNOS Kernel Software Suite [12.3R12.4]\nJUNOS Crypto Software Suite [12.3R12.4]\nJUNOS Online Documentation [12.3R12.4]\nJUNOS Enterprise Software Suite [12.3R12.4]\nJUNOS Packet Forwarding Engine Enterprise Software Suite [12.3R12.4]\nJUNOS Routing Software Suite [12.3R12.4]\nJUNOS Web Management [12.3R12.4]\nJUNOS FIPS mode utilities [12.3R12.4]"
],
"stdout_lines": [
[
"fpc0:",
"--------------------------------------------------------------------------",
"Hostname: KC2-SWI-SalesCloset",
"Model: ex2200-48p-4g",
"JUNOS Base OS boot [12.3R12.4]",
"JUNOS Base OS Software Suite [12.3R12.4]",
"JUNOS Kernel Software Suite [12.3R12.4]",
"JUNOS Crypto Software Suite [12.3R12.4]",
"JUNOS Online Documentation [12.3R12.4]",
"JUNOS Enterprise Software Suite [12.3R12.4]",
"JUNOS Packet Forwarding Engine Enterprise Software Suite [12.3R12.4]",
"JUNOS Routing Software Suite [12.3R12.4]",
"JUNOS Web Management [12.3R12.4]",
"JUNOS FIPS mode utilities [12.3R12.4]"
]
]
}
我认为这很简单,如果版本出现在std.out中,那么它应该会失败。
现在它应该如何运作?
我甚至尝试过使用字符串" Peanuts"它仍然通过......
答案 0 :(得分:3)
根据您的调试输出,stdout实际上是一个数组。
您可以将语句更改为:
failed_when: '"[12.3R12.4]" in results.stdout[0]'
我的猜测是,由于junos_command接受多个命令,它会将每个命令的输出放在一个stdout数组中,所以如果指定两个命令,第二个输出可以作为results.stdout[1]
答案 1 :(得分:1)
This answer正确识别错误的原因,但潜在的原因是您为commands
参数提供了单个元素列表:
commands:
- show version
对于您的用例,您只需将其替换为:
commands: show version
无需更改failed_when
中的条件即可解决问题。
答案 2 :(得分:0)
@Victor Jerlin
就是这样。我原本没有注意到stdout实际上是一个阵列。
@techraf
您提供的分辨率不起作用,仍然产生相同的结果(输出仍然是数组的格式)
谢谢大家。