2017-10-12 4 views
2

は、単純なfailed_whenチェックを実行しようとすると、期待通りに動作していないfailed_when ::Ansibleは -

- 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

があなたのデバッグ出力によると、stdoutが実際には配列です...私も、文字列「ピーナッツ」を使用してみました、それはまだ渡されました。

次のようなものにステートメントを変更することができます:

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

私の推測では、junos_commandは、いくつかのコマンドを受け付けますので、2番目の2つのコマンドを指定するので、もし、それが、標準出力配列内の各々の出力を置くということですresults.stdout[1]

1

This answerが正しく、エラーの原因を特定するように、出力にはアクセスできますが、根本的な理由は、あなたがcommands引数に単一要素のリストを提供するという事実である:

ご使用のケースの場合
commands: 
- show version 

、あなたは単にでそれを置き換えることができます。failed_whenで条件を変更することなく、問題を解決します

commands: show version 

0

@Victor Jerlin

それでした。もともと、stdoutは実際は配列であることに注意を払っていませんでした。

@techrafあなたはまだ動作しませんでした提供、および解像度は

みんなありがとう(出力配列の形式でまだあった)と同じ結果をもたらしました。