2016-08-10 5 views
12

私はリソースを整理するためのプレイブックを持っており、すべてのエラーを無視し、最後まで続けるようにして、エラーがあれば最後に失敗するようにします。それは一つのタスクだった場合不可能タスクのエラーを無視し、タスクにエラーがあった場合は、プレイブックの最後で失敗します。

私は

ignore_errors: yes 

でエラーを無視することができ、私は私が最後に失敗するにはどうすればよい

- name: this command prints FAILED when it fails 
    command: /usr/bin/example-command -x -y -z 
    register: command_result 
    ignore_errors: True 

- name: fail the play if the previous command did not succeed 
    fail: msg="the command failed" 
    when: "'FAILED' in command_result.stderr" 

(キャッチansibleエラーから)のような何かをするだろうか?私はいくつかのタスクを持っています、私の "いつ"の条件は?

答えて

12

Failモジュールを使用してください。

  1. エラーが発生した場合に無視する必要があるすべてのタスクでignore_errorsを使用します。
  2. は、実行に失敗し、フラグが設定されている場合(たとえば、結果= false)のいずれかのタスクの実行脚本の終わりに
  3. に障害があるたびに、チェックフラグを設定し、それに応じて
- fail: msg="The execution has failed because of errors." 
    when: flag == "failed" 

更新:

使用あなたはあなたの例で示したように、タスクの結果を格納するレジスタです。次に、このようなタスクを使用してください:

- name: Set flag 
    set_fact: flag = failed 
    when: "'FAILED' in command_result.stderr" 
+0

ありがとう!私はどのようにして、不自由な人のエラーだけにフラグを設定するのですか? – Illusionist

+0

を参照してください。基本的には、各タスクの実行後にこのフラグを設定しています。このプレイブックの最後にフラグが失敗に設定されている場合、プレイブックは失敗します。タスクのいずれかが失敗した場合にのみ失敗するように設定されます。それ以外の場合は失敗しないように設定され、プレイブックの実行は成功します。 –

2

失敗モジュールは素晴らしいです!ありがとう。

私はそれをチェックする前に私の事実を定義しなければなりませんでした。そうでなければ、私は未定義の変数エラーが出ます。

引用符でスペースを入れずにファクトを設定するときに問題が発生しました。

これは働いていた:あなたがブロックに失敗することができ、すべてのタスクをラップし、そのブロックでignore_errors: yesを使用することができます

set_fact: flag = failed 
3

set_fact: flag="failed" 

をこれがエラーを投げました。

tasks: 
    - name: ls 
    command: ls -la 
    - name: pwd 
    command: pwd 

    - block: 
    - name: ls non-existing txt file 
     command: ls -la no_file.txt 
    - name: ls non-existing pic 
     command: ls -la no_pic.jpg 
    ignore_errors: yes 

もっと読む程度error hadnling in blocks.

関連する問題