2017-08-21 11 views
-1

私のノードでインターネットに接続するためのテストをgoogle.comで行うことはできません。このコードは、ping応答が戻ってきたときにうまく動作しますが、失敗した場合はdictオブジェクトエラーが発生します。誰かが私のために下のコードをチェックしてください。私が得ているエラーも以下にリストされています。それはちょっとした問題だと確信しています。可能なコードが動作しない

- name: Checking Internet Access 
ios_command: 
    commands: ping www.google.com source g0/1.1 
    provider: "{{cli}}" 
    wait_for: 
    - result[0] contains "!!!" 
register: result 

failed_when: "not '!!!' in result.stdout[0]" 

致命的な:[192.168.12.252]:失敗しました! => {"失敗":true、 "msg": "条件付きチェックは '' !!! ' 'dict object'に属性 'stdout'がありません。 "}

(エラーが発生しました)
+0

構文の問題のようです。 'result.stdout [0]'を 'result [0] .stdout'に切り替えます。 – kfreezy

+0

これを試してみましたが、 'dictオブジェクトに要素がありません'というエラーが表示されます – techkid

+0

おそらく 'result.stdout'ですか?デバッグタスクを追加してから、 'result'の内容を出力してみてください。 – kfreezy

答えて

1

テキスト出力を読み込んで一致させる代わりに、result.rcにコマンドの終了コード(戻りコード)を使用する方がよい。 Debianの9のmanページから:

pingがパケットカウントと期限が両方指定されている、と パケットを数えるよりも少ないがで受信された場合、それはコード1で終了しますまったく応答パケットを受信しない場合期限が到来した時は、それはまたそれがコードで終了他のエラーのコード1で終了します。2.それ以外の場合は、例えば、コード0

で 終了します

- hosts: short.fritz.box 
    tasks: 
    - name: checking ping response from magnus 
    command: ping -c 3 magnus.fritz.box 
    register: result 
    failed_when: result.rc != 0 

はテスト済みDebian 9.1でAnsible 2.3.1を使用しています。マグナスが走っていて、到達可能なときに成功し、マグナスが一時停止すると失敗します。

関連する問題