[Ansible] 変数による条件付き実行

登録された変数に基づく条件

プレイブックでは、以前のタスクの結果に基づいてタスクを実行したり、スキップしたりしたいことがある。例えば、以前のタスクによってアップグレードされた後にサービスを設定したい場合など。登録された変数に基づいた条件を適用したい場合には以下のようにする。

  1. 先のタスクの結果を変数として登録する
  2. 登録した変数に基づいて条件テストを行う

変数の登録はregisterキーワードを使って行う。登録された変数には、それを作成したタスクのステータスと、そのタスクが生成した出力が含まれる。登録された変数は、テンプレートとアクションライン、および条件付きwhenステートメントで使うことができる。variable.stdoutを使うと、登録された変数の中身の文字列にアクセスすることができる。以下に例を示す。

変数がリストの場合、タスクのループ内で登録された結果を使うことができる。リストでない場合は、stdout_linesまたはvariable.stdout.split()を使ってリストに変更することができる。また、他のフィールドによりラインを分割することもできる。

登録された変数の中身の文字列が空の場合もある。登録された変数のstdoutが空であるホストでのみ他のタスクを実行したい場合は、登録された変数の中身の文字列が空かどうかを確認する。

タスクが失敗したホストや、条件を満足せずにタスクがスキップされたホストであっても、Ansibleは常に全てのホストの登録変数に何かを登録する。これらのホストでフォローアップタスクを実行するには、スキップされたホストに関して登録された変数を照会する(“undefined”や”default”に対しては行わない)。

以下に、タスクの成功/失敗に基づく条件例を示す。失敗した場合でもAnsibleをホストで実行させ続けたい場合にはエラーを無視する必要がある。

参考サイト

Conditionals — Ansible Documentation
https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html#the-when-statement