ansibleはある程度ファイルが肥大化してくると、管理するのが大変になります。
一般的にはプログラムのようにある程度のまとまりにわけてそれを読み込むということになります。
ある程度のまとまりのことをroleなどと呼ぶのが一般的です。
Contents
roles
例えばWordPressをインストールする場合には、Apache,PHP,WordPressのインストールが必要になります。
この1つ1つがrolesになります。
ansibleでこれらを管理する場合にはこれらのroleとそれらを呼び出すファイル自体が必要になります。
ファイル構成
rolesを使うには以下のようなファイル構成になっている必要があります。
1 2 3 4 5 6 |
├── roles │ └── apache │ ├── tasks │ │ └── main.yml │ └── templates ├── web.yml |
ディレクトリ名やファイル名を間違えるとうごかないようですので、気を付けましょう。必ずrolesというファイルの下に置き、roles直下がroleの名称になります。その下に置く場合はtasks/main.ymlとなります。
実際にはtemplate以外にも変数を持たせたい場合にはvarsなどのディレクトリを作ることがあります。起動させるファイルがweb.ymlになります。
ちなみにvarsの下にmain.ymlと書いて変数を定義しておけばtask/main.ymlでは読み込む構文なしでその変数を扱えます。変数の定義方法などはいままでと一緒です。
web.yml
1 2 3 4 5 |
- hosts: target remote_user: remote_user become: yes roles: - apache |
host情報やユーザーの情報などはここに書いておき、task内容だけをrolesに書いておくのが良いでしょう。
roles/apache/tasks/main.yml
1 2 |
- name: "httpd install" yum: name=httpd state=latest |
実行するときにansible-playbook -i ホストファイル web.ymlでOKです。
なお、tagは各タスクにもつけられますが、roleごとにもつけることができます。
小ネタ
作業用ユーザーなど比較的頻繁に変わる情報を入れるときは–extra-varsというオプションを使って実行時に入れることもできます。
例えば上記のような場合は、
1 |
ansible-playbook -i ホストファイル --extra-vars 'remote_user=作業用ユーザー' web.yml |
と入力してあげればOKです。