🌠
Ansibleのロール(Role)を作る時のディレクトリ構成
Ansible推奨のディレクトリ構成を一度採用してみたけど、しっくりこなかったので自分なりのおすすめ構成をメモしておく。
Ansible推奨のディレクトリ構成
AnsibleドキュメントのDirectory Layoutには以下の通り掲載されている。
roles/
common/ # this hierarchy represents a "role"
tasks/ #
main.yml # <-- tasks file can include smaller files if warranted
handlers/ #
main.yml # <-- handlers file
templates/ # <-- files for use with the template resource
ntp.conf.j2 # <------- templates end in .j2
files/ #
bar.txt # <-- files for use with the copy resource
foo.sh # <-- script files for use with the script resource
vars/ #
main.yml # <-- variables associated with this role
また別の例としては以下の通り。
roles/
common/
webtier/
monitoring/
fooapp/
上記のようにインストール先の種類でRoleを分けていると「JavaをインストールするTaskって、どこに入ってたっけ?」となる。
おすすめのディレクトリ構成
Directory Layout
こんな感じ。
roles/
common/ # this hierarchy represents a "role"
tasks/ #
main.yml # <-- tasks file can include smaller files if warranted
java/ # this hierarchy represents a "role"
tasks/ #
main.yml # <-- tasks file can include smaller files if warranted
httpd/ # this hierarchy represents a "role"
tasks/ #
main.yml # <-- tasks file can include smaller files if warranted
handlers/ #
main.yml # <-- handlers file
templates/ # <-- files for use with the template resource
ntp.conf.j2 # <------- templates end in .j2
files/ #
bar.txt # <-- files for use with the copy resource
foo.sh # <-- script files for use with the script resource
hosts-production # inventory file for production servers
hosts-staging # inventory file for staging environment
group_vars/
group1.yml # group_varsは何かの時に使った記憶/残しておく
group2.yml
host_vars/
*** # ホストの設定はほとんどインベントリに書くのでhost_varsは不要
site.yml # master playbook
webservers.yml # playbook for webserver tier
dbservers.yml # playbook for dbserver tier
site.yml からの参照
site.yml は呼び出すRoleを指定するのみ。
---
- name: ansible
hosts: all
connection: ssh
gather_facts: false
roles:
- common
- java
- httpd
Roleに指定する細かい設定は変数化して、すべてインベントリのホスト毎の設定を参照する。
ansible galaxy に公開するとなるとディレクトリ構成はまた変わってくるので、それはまた別のお話。
Discussion