2016-12-07 28 views
10

Anabilitiesのシェルモジュールを使用して、特定の文字列を見つけて変数に格納しています。しかし、grepが何も見つからなかった場合は、エラーが発生します。grepの結果が空の場合、シェルモジュールがエラーを返す

例:

- name: Get the http_status 
    shell: grep "http_status=" /var/httpd.txt 
    register: cmdln 
    check_mode: no 

http_status文字列が存在しない場合、私はこのAnsible脚本を実行すると、脚本が停止されます。私はスタンダードになっていません。

文字列が見つからなくても、中断することなくAnecessを実行するにはどうすればよいですか?

+0

私の質問にも、私はいくつかの実際を含むためinterptionなし – SSN

答えて

11

あなたが観察したように、grep終了コードがゼロでない場合、ansibleは実行を停止します。 ignore_errorsで無視することができます。

もう1つのトリックは、grep出力をcatにパイプすることです。したがって、catの終了コードは、そのstdinがgrepのstdoutであるため、常にゼロになります。一致がある場合、また一致するものがない場合にも機能します。それを試してみてください。

- name: Get the http_status 
    shell: grep "http_status=" /var/httpd.txt | cat 
    register: cmdln 
    check_mode: no 
15

grep指定された文字列が見つからない場合、コード1が返されます。リターンコードが0以外の場合は、設計者が実行を停止します。システムが正常に動作しています。このエラーに脚本の実行を停止からAnsibleを防止するために

、次のことができます。

  • 適切な条件

とタスク

  • 使用failed_when:パラメータにignore_errors: yesパラメータを追加grepは例外のエラーコード2を返すので、2番目の方法はより適切なようです:

    - name: Get the http_status 
        shell: grep "http_status=" /var/httpd.txt 
        register: cmdln 
        failed_when: "cmdln.rc == 2" 
        check_mode: no 
    

    一つ一つの時間を「変更」としてタスクが報告されないように、また、changed_when: falseを追加することを検討することがあります。

    すべてのオプションについては、Error Handling In Playbooks文書に記載されています。

  • +0

    ボーナスポイントをansibleを実行したい空はfailed_when経由条件検出に失敗し、changed_when使用しての提案としますAnsibleでのシステム変更の外観を避けるために、偽の出力! –

    関連する問題