条件分岐の紹介
Ansible の条件分岐を使うと、特定の条件に基づいてタスクの実行を制御できます。システムの状態や特定の変数の値に応じて異なるアクションを実行する必要がある場合、これは非常に便利です。
条件分岐の使い方を示す簡単なプレイブックを作成しましょう。
nano conditional_example.yml
このコマンドは、nano テキストエディタを開き、conditional_example.yml
という名前の新しいファイルを作成します。次に、次の内容を追加しましょう。
---
- name: Conditional Example
hosts: localhost
gather_facts: yes
tasks:
- name: Check OS family
debug:
msg: "This is a Debian-based system"
when: ansible_os_family == "Debian"
- name: Check OS family (alternative)
debug:
msg: "This is not a Debian-based system"
when: ansible_os_family!= "Debian"
これを分解してみましょう。
- ファイルの先頭の
---
は、YAML ドキュメントの開始を示します。
name: Conditional Example
は、プレイブックに名前を付けています。
hosts: localhost
は、このプレイブックがローカルマシンで実行されることを指定しています。
gather_facts: yes
は、Ansible に対してタスクを実行する前にシステムに関する情報を収集するように指示します。これは重要です。なぜなら、条件分岐でこれらの情報を使用するからです。
tasks:
は、実行するタスクのリストの開始を示します。
各タスクは debug
モジュールを使ってメッセージを表示しますが、実行は when
句によって制御されます。
- 最初のタスクは、システムが Debian ベースの場合にのみ実行されます (
ansible_os_family == "Debian"
)。
- 2番目のタスクは、システムが Debian ベースでない場合にのみ実行されます (
ansible_os_family!= "Debian"
)。
ansible_os_family
は、Ansible によって対象システムに関して収集される情報です。ここでは、条件分岐がどのように機能するかを示すために使用されています。
nano エディタを保存して終了します(Ctrl+X を押してから、Y を押してから Enter)。
次に、プレイブックを実行しましょう。
ansible-playbook -i../inventory.ini conditional_example.yml
このコマンドは、Ansible に対してプレイブックを実行するように指示します。-i../inventory.ini
オプションは、先ほど作成したインベントリファイルを指定しています。
システムが Debian ベースであるかどうかを示す出力が表示されるはずです。システムの OS ファミリに応じて、デバッグメッセージのいずれかのみが表示されます。
この例は、条件分岐を使ってプレイブックを異なる環境に適応させる方法を示しています。実際のシナリオでは、条件分岐を使って異なる OS タイプに異なるパッケージをインストールしたり、既にファイルが存在する場合に特定のタスクをスキップしたりすることができます。
条件分岐の力は、それがプレイブックを柔軟にし、各ケースに対して別々のプレイブックを必要とせずにさまざまなシナリオを処理できる能力にあることを忘れないでください。