Ansibleのディレクトリ構成とその用途について纏めてみました
各rolesについては必要なディレクトリのみ作成するのが良さそうです
推奨ディレクトリ構成
. ┣━ group_vars # 各グループごとの変数設定用ディレクトリ ┃ ┣━ dbservers # dbservers用変数ファイル ┃ ┗━ webservers # webservers用変数ファイル ┃ ┣━ host_vars # 各ホストごとの変数設定用ディレクトリ ┃ ┣━ db01 # db01用変数ファイル ┃ ┣━ web01 # web01用変数ファイル ┃ ┗━ web02 # web02用変数ファイル ┃ ┣━ production # プロダクション用inventoryファイル ┣━ staging # staging用inventoryファイル ┣━ site.yml # site全体用playbookファイル ┣━ dbservers.yml # db用playbookファイル ┣━ webservers.yml # web用playbookファイル ┃ ┗━ roles # role用格納ディレクトリ
group_vars/
- グループ毎の変数を定義するのに使います、role ではありません、role 毎の変数は roles/{role_name}/vars/ を使います。例えばロケーション毎に異なる変数など。ファイル名はインベントリファイルで設定するグループ名です。インベントリファイルにグループ変数を書くことも可能です
host_vars/
- ホスト毎の変数を定義するのに使います。group_vars と同じくファイル名はインベントリファイルに設定したホスト名です。インベントリファイルの中でホスト名の右に並べて書くこともできます
sites.yml
- ansible-playbook コマンドに渡す大元 (root) の playbook ファイルです
roles/
rolesディレクトリ構成
roles # role用格納ディレクトリ ┃ ┣━ .sample # role用サンプルディレクトリ ┃ ┃ ┃ ┣━ defaults # 変数のデフォルト設定ディレクトリ ┃ ┃ ━ main.yml ┃ ┣━ files # fileモジュールで使用するファイル格納用ディレクトリ ┃ ┃ ━ init.conf ┃ ┣━ handlers # ハンドラーtask用ディレクトリ ┃ ┃ ━ main.yml ┃ ┣━ meta # メタ情報用ディレクトリ ┃ ┃ ━ main.yml ┃ ┣━ tasks # task用ディレクトリ ┃ ┃ ━ main.yml ┃ ┣━ templates # テンプレートファイル格納用ディレクトリ ┃ ┃ ━ ntp.conf.j2 ┃ ┗━ vars # 変数用ディレクトリ ┃ ━ main.yml ┃ ┣━ <各roleディレクトリ> : :
roles/
- このディレクトリの下に role (役割) 毎のディレクトリを作成し、それぞれの role にさらに files/, handlers/, tasks/, templates/, vars/, defaults/, meta/ というサブディレクトリを作成します (その role で使うもののみ)
roles/*/files/
- 当該 role の task で使うファイル関連モジュール (copy) が src として使うファイルの置き場所。任意のファイル名で置きます
roles/*/handlers/
- 設定変更後にサービスの再起動をさせたりする場合に、notify という定義で処理を呼び出しますが、その呼び出されるハンドラをここで定義します。main.yml というファイルで作成しますが、include という定義で複数ファイルをそこから読み込ませることが可能です
roles/*/tasks/
- 何かをインストールしたり、ユーザーを作成したりする task 定義のファイルをここに置きます。handlers と同じように main.yml というファイルが起点となります
roles/*/templates/
- template モジュールで利用するテンプレートファイルを置きます。このモジュールでは Jinja2 (神社) というテンプレートエンジンが使わ>れていて .j2 という拡張子を使います
roles/*/vars/
- role 毎に設定する変数を定義するファイルを置きます。handlers や tasks と同じく main.yml ファイルが起点となります
roles/*/defaults/
- 当該 role で使う変数の default 値を設定します。他で設定されていなければここで設定した値が使われます。main.yml に書きます。この>変数が一番低い優先度です 「Ansible の変数の優先順」
roles/*/meta/
- role の依存設定を書きます。A という role が B という role に依存しているなら roles/A/meta/main.yml に次のように書きます
--- dependencies: - role: B foo: "bar"