Ansible - 失败_当没有按预期工作时

时间:2017-10-12 21:20:38

标签: ansible ansible-2.x

尝试运行简单的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"它仍然通过......

3 个答案:

答案 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

您提供的分辨率不起作用,仍然产生相同的结果(输出仍然是数组的格式)

谢谢大家。