2017-10-12 359 views
2

试图运行一个简单的failed_when检查::Ansible - failed_when工作不正常

- 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,那么它应该会失败。

这是现在它应该如何工作?

我甚至使用字符串“花生”尝试,它仍然过去了......

+0

我无法理解这句话“*我甚至尝试过使用字符串”花生“,它仍然通过...... *”为什么不能通过?字符串不在那里,所以没有理由失败。 – techraf

回答

2

根据您的调试输出,标准输出实际上是一个数组。

你可以声明更改为类似:

failed_when: '"[12.3R12.4]" in results.stdout[0]' 

我的猜测是,由于junos_command接受多个命令,就会将每个输出在标准输出数组,因此,如果指定两个命令第二输出将访问作为results.stdout[1]

1

This answer正确识别错误的原因,但根本原因是事实,你commands参数提供一个单一的元素列表:

commands: 
- show version 

对于你的使用情况,您可以简单地将其替换为:

commands: show version 

来解决这些问题,而不需要改变failed_when的条件。

0

@Victor Jerlin

就是这样。我最初并没有注意到stdout实际上是一个数组。

@techraf

您提供没有工作,仍然分辨率产生相同的结果(输出仍然处于一个数组的格式)

谢谢大家。