このステップでは、Ansible Playbook で変数を使用する方法を学びます。変数は、自動化を柔軟で再利用可能にし、読みやすく保守しやすくするために不可欠です。パッケージ名やファイルパスなどの値をタスクに直接ハードコーディングする代わりに、それらを変数として定義し、Playbook 全体で参照できます。ここでは、変数を使用して Apache Web サーバー (httpd) をインストールし、基本的な Web ページをデプロイする単純な Playbook を作成します。
-
プロジェクトディレクトリに移動する
まず、正しい作業ディレクトリにいることを確認します。この実験のすべての作業は、作成済みの ~/project ディレクトリ内で行います。
cd ~/project
ansible-core パッケージをインストールします。
sudo dnf install -y ansible-core
-
Ansible Playbook を作成する
次に、Playbook ファイルを作成します。名前は playbook.yml とします。nano などのコマンドラインテキストエディタを使用してファイルを作成および編集できます。
nano playbook.yml
このコマンドで nano エディタが開き、空のファイルが表示されます。Playbook の初期部分を追加します。このセクションでは、Play の名前、ターゲットホスト(同じマシン上で実行するため localhost)、および変数を定義する vars セクションを指定します。
---
- name: Deploy Apache using variables
hosts: localhost
become: true
vars:
web_pkg: httpd
web_content: "Hello from Ansible Variables"
Playbook 構造の詳細は以下の通りです。
hosts: localhost: Playbook をローカルマシンで実行することを指定します。
become: true: タスクに対して特権昇格(sudo と同等)を使用するように Ansible に指示します。これはソフトウェアのインストールに必要です。
vars: 変数のキーと値のペアを定義する辞書です。パッケージ名用に web_pkg、テスト Web ページの内容用に web_content を定義しました。
-
Playbook にタスクを追加する
次に、vars セクションの下に、これらの変数を使用する tasks を追加します。最初のタスクで Apache パッケージをインストールし、2 番目のタスクで index.html ファイルを作成します。nano エディタで playbook.yml ファイルに以下の tasks ブロックを追加してください。
tasks:
- name: Install the latest version of Apache
ansible.builtin.dnf:
name: "{{ web_pkg }}"
state: latest
- name: Create a basic index.html file
ansible.builtin.copy:
content: "{{ web_content }}"
dest: /var/www/html/index.html
{{ variable_name }} を使用して、先ほど定義した変数を参照している点に注目してください。これは Ansible が変数に使用する Jinja2 テンプレートです。これによりタスク定義が汎用的になります。例えば Nginx をインストールしたい場合、タスク自体ではなく web_pkg 変数を変更するだけで済みます。
-
Playbook を確認して保存する
完成した playbook.yml ファイルは以下のようになります。YAML はスペースに非常に敏感なため、内容とインデントを再確認してください。
---
- name: Deploy Apache using variables
hosts: localhost
become: true
vars:
web_pkg: httpd
web_content: "Hello from Ansible Variables"
tasks:
- name: Install the latest version of Apache
ansible.builtin.dnf:
name: "{{ web_pkg }}"
state: latest
- name: Create a basic index.html file
ansible.builtin.copy:
content: "{{ web_content }}"
dest: /var/www/html/index.html
nano でファイルを保存するには、Ctrl+X を押し、Y で変更を確定し、最後に Enter を押して playbook.yml という名前で書き込みます。
-
Playbook の構文をチェックする
Playbook を実行する前に、構文にエラーがないか確認することをお勧めします。
ansible-playbook --syntax-check playbook.yml
構文が正しい場合、以下のように Playbook のファイルパスが出力され、有効であることが確認できます。
playbook: playbook.yml
エラーが表示された場合は、nano playbook.yml でファイルを再度開き、修正してください。正しいインデント(通常はスペース 2 つ)に細心の注意を払ってください。
-
Playbook を実行する
Playbook を実行します。Ansible は localhost に接続し、変数を読み込んでタスクを実行します。
ansible-playbook playbook.yml
各タスクが正常に実行されたことを示す出力が表示されるはずです。changed ステータスは、Ansible がパッケージのインストールやファイルの作成など、システムに変更を加えたことを意味します。
PLAY [Deploy Apache using variables] *******************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Install the latest version of Apache] ************************************
changed: [localhost]
TASK [Create a basic index.html file] ******************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Playbook を 2 回目に実行すると、パッケージは既にインストールされており、ファイルも正しい内容になっているため、タスクは changed ではなく ok と報告されるはずです。これは Ansible の冪等性(べきとうせい)を示しています。
-
設定を手動で検証する
Playbook は完了しましたが、タスクが期待通りに動作したかを手動で確認できます。まず、httpd パッケージがインストールされたかを確認します。
rpm -q httpd
出力にはパッケージ名とバージョンが表示されるはずです。
httpd-2.4.57-7.el9.x86_64
次に、index.html ファイルの内容を確認します。
cat /var/www/html/index.html
出力は web_content 変数の値と一致するはずです。
Hello from Ansible Variables
これで、Ansible Playbook で変数を使用してシステムを設定することに成功しました。