Block¶
Block は、タスクの論理グループおよびプレイのエラー処理を許可します。単一タスク (ループを除く) に適用できるほとんどのタスクはブロックレベルで適用できるため、タスクに共通するデータまたはディレクティブの設定がより簡単になります。これは、ディレクティブがブロック自体に影響を与えるわけではありませんが、ブロックで囲まれたタスクに引き継がれます。つまり、ブロック自体ではなく、タスクに適用される タイミング です。
上記の例では、3 つの各タスクはブロックから when 条件を追加し、
タスクのコンテキストで評価してから実行されます。また、引用符で囲まれたすべてのタスクに対して、
特権昇格ディレクティブを継承して「become to root」を有効化します。最後に、ignore_errors: yes
は、一部のタスクが失敗しても Playbook の実行を継続します。
ブロック内のタスクの名前は、Ansible 2.3 以降で利用できます。Playbook の実行時に実行するタスクが分かりやすくなるように、ブロック内またはその他のすべてのタスクで名前を使用することが推奨されます。
ブロックのエラー処理¶
また、ブロックには、ほとんどのプログラミング言語で例外を処理するのと同じような方法でエラーを処理する機能が導入されています。 ブロックは、タスクの「faileded」ステータスのみを処理します。問題のあるタスク定義または到達不可能なホストは、「復旧可能な可能」エラーではありません。
emphasize-lines: | |
---|---|
3,10 |
|
caption: | ブロックエラーの処理例 tasks: - name:Handle the error
|
これにより、実行に失敗したタスクのステータスが「取り消され」、成功したかのように再生が続行されます。
また、always
セクションもあります。これは、タスクのステータスに関係なく実行されます。
emphasize-lines: | |
---|---|
2,9 |
|
caption: | always セクションのあるブロック
|
これをすべて一緒に追加して、複雑なエラー処理を実行できます。
rescue
セクションが実行されたエラーがあると、block
のタスクは通常どおり実行されます。
以前のエラーからの復旧に必要な作業と併用してください。
always
セクションは、block
セクションおよび rescue
セクションで前にエラーが発生したかどうかに関わらず実行されます。
rescue
セクションが正常に完了した場合は、エラーステータスが「消去」されるため (報告はされない)、プレイが続行されることに注意してください。
これは、max_fail_percentage
設定または any_errors_fatal
設定を発生させませんが、Playbook の統計には表示されることを意味します。
別の例として、エラーが発生した後にハンドラーを実行する方法があります。
New in version 2.1.
また、Ansible は、ブロックの rescue
部分にタスクの変数をいくつか提供します。
- ansible_failed_task
- 「failed」を返してレスキューを発生させたタスク。たとえば、名前を取得するには、
ansible_failed_task.name
を使用します。 - ansible_failed_result
- rescue を発生させた、失敗したタスクの戻り値。これは、
register
キーワードでこの変数を使用するのと同じです。
See also
- Playbook について
- Playbook の概要
- ロール
- ロール別の Playbook の組織
- ユーザーメーリングリスト
- ご質問はございますか。 Google Group をご覧ください。
- irc.freenode.net
- IRC チャットチャンネル #ansible