2016-11-04 1 views
1

遊びプレイブックを実行すると、タスク(通常はシェルやコマンド)がエラーコードを返すことが予想されるユースケースによく遭遇します。致命的なタスクエラーを回避する必要性を避けるには?

解決策は結果を登録し、ignore_errors: trueを追加し、後で実際のエラーであるかどうかを判断することでした。

さて、これで1つの問題がある:それは混乱あなたとロギングが

fatal: ... 
...ignoring 

のような赤のエラーが表示されますされますので、我々はログに偽のエラーを持っていないこれらを回避する方法はありますか?

+0

関連するhttps://stackoverflow.com/questions/45983636/how-to-always-run-some-ansible-roles-after-previous-failures – sorin

答えて

-1

https://stackoverflow.com/a/40430875/1849837changed_whenfailed_whenを使用)が最適です。 1.4以降ではAnsibleから動作することに注意してください。

古いバージョンの場合、私が見る(そして使用する)唯一の方法は、失敗する可能性のあるタスクをまったく実行しないことです。そのために条件(when)を使用することができます。

まずあなたが状態を確認し、変数

- name: "check if condition is met" 
    command: some condition that populates result 
    register: result 

- name: "some operation" 
    command: operation that runs only if result is not failed. 
    when: result|failed 

にチェックの結果を割り当てる必要がありますこれは、いくつかの定型的なコードが含まれて(あなたが条件をテストするために人工的なステップを必要とする)が、私は何より良い選択肢を見ません。 fatal: ... ...ignoringでログを汚染するよりも優れていると私は信じています。

+2

これは恐ろしいハックです、@コンスタンチンSuvorovの答えを見てください。 –

+0

私はあなたの答えが良いことに同意します。しかし、失敗したときは、1.4が不可能なので利用可能です。私はそれを指定するために私とあなたの答えを編集しました。 –

5

failed_whenchanged_whenお手伝いをすることです:

- shell: echo good | grep bad 
    register: res 
    failed_when: false 
    changed_when: false 

これは常に失敗したシェルコマンドにもかかわらず、良いと緑色になります。
登録済みの変数に基づいて複合文failed_whenを定義することもできます。

関連する問題