2016-09-06 24 views
0

私はAnsibleで簡単なtailコマンドを実行しようとしています。すべてが見つからなくなるまで3つの文字列を繰り返します。見つかった場合、すべてが見つからなくなるまでtailコマンドでループします。Ansible:shellコマンドが空白を返す

- name: Tail the logs for string 
    shell: "tail -10 /path/to/log/file.log | egrep 'STRING1|STRING2|STRING3'" 
    register: tail 
    until: "'STRING1' and 'STRING2' and 'STRING3' not in tail.stdout_lines" 
    retries: 10 
    delay: 5 

上記のタスクを実行しても何も返されません。致命的なエラーで終了します。これが成功のケースですが。

fatal: [testserver]: FAILED! => {"changed": true, "cmd": "tail -10 /path/to/log/file.log | egrep 'STRING1|STRING2|STRING3'", "delta": "0:00:00.012770", "end": "2016-09-07 07:44:35.684238", "failed": true, "invocation": {"module_args": {"_raw_params": "tail -10 /path/to/log/file.log | egrep 'STRING1|STRING2|STRING3'", "_uses_shell": true, "chdir": null, "creates": null, "executable": null, "removes": null, "warn": true}, "module_name": "command"}, "rc": 1, "start": "2016-09-07 07:44:35.671468", "stderr": "", "stdout": "", "stdout_lines": [], "warnings": []} 

なぜ致命的な状態で終了するのかわかりません。

+1

'を使用しましたtail.stdout_lines'には以下が含まれます。 –

答えて

2

grepは、何も一致しない場合は0以外を返します。あなたはその終了ステータス上書きする場合:tailコマンドを解決した後

shell: "tail -10 /path/to/log/file.log | egrep 'STRING1|STRING2|STRING3' ||:" 
+0

ありがとうございます。それはタスクの致命的な終わりを避けたようですが、出力に関係なく常にタスクが変更されているように見えます。 'until:" 'STRING1'と 'STRING2'と 'STRING3'はtail.stdout_linesに含まれていません " 上記の状態は実行されていないようです。 –

+1

@OmarE ''STRING1'はtail.stdout_linesにはなく、 'STRING2'はtail.stdout_linesには含まれていません。プログラミングは自然言語ではなく、 ''文字列はほとんど意味がありません。 – zerkms

+0

@zerkms「until:」「STRING1」という条件がtail.stdout_linesにない場合でも、タスクは依然として関係なく実行されます。 –

0

を問題チャールズ・ダフィー@からの感謝のアドバイスはループ条件に残りました。ここで

は正しい状態です: until: '"STRING1" not in tail.stdout and "STRING2" not in tail.stdout and "STRING3" not in tail.stdout'

私も 'STRING1' と「STRING2'`はどんな `、常に真の値ではありませんtail.stdout代わりのtail.stdout_lines

おかげ

+0

ところで - 私の見解は、あなたの質問とは無関係の副次的な問題であった。彼らはバグですが、あなたが尋ねたバグではありません。 –