Ansibleベストプラクティスについて
Best Practices — Ansible DocumentationにAnsibleのベストプラクティスが書かれているのでご一読をお勧めします。
Directory Layoutにプレイブックを作成する際のお勧めディレクトリ構成が書かれているので、これに合わせて分割、配置するのがよさそうです。
2014-06-11追記
と思っていたのですが、Directory Layoutにも書いてありますが、このディレクトリ構成に拘る必要はなくて、ニーズに応じて好きなディレクトリ構成を作って良いとのことです。
roleのディレクトリツリーを作成するplaybook
このような構成のディレクトリツリーを作成するplaybookを書いてみました。
//github.com/hnakamur/ansible-playbooks/blob/master/ansible-directories.yml
# ansible-directories.yml
# Create directories for ansible playbooks.
#
# Example Usage:
# Create a single role.
# $ ansible-playbook --extra-vars 'roles=some-role' ansible-directories.yml
# or
# Create multiple roles.
# $ ansible-playbook \
# --extra-vars '{"roles":["common", "webservers", "dbservers"]}' \
# ansible-directories.yml
- hosts: localhost
gather_facts: no
connection: local
vars:
roles:
- common
tasks:
- name: create vars directories
file: path={{ item }} state=directory
with_items:
- group_vars
- host_vars
- name: create role directories
file: path=roles/{{ item[0] }}/{{ item[1] }} state=directory
with_nested:
- roles
- [ 'tasks', 'handlers', 'templates', 'files', 'vars', 'meta' ]
使い方
例えば、some-roleという1つのrole用にディレクトリを作る場合は
ansible-playbook --extra-vars 'roles=some-role' ansible-directories.yml
common, webservers, dbserversという複数のrole用にディレクトリを作る場合は
ansible-playbook \
--extra-vars '{"roles":["common", "webservers", "dbservers"]}' \
ansible-directories.yml
--extra-vars
についてはPassing Variables On The Command Lineに説明があり、JSONやYAMLで変数を指定できるようになっています。