「初めてのAnsible」を読み進めながらのメモ
前掲
初めてのAnsible(1章:イントロダクション)
初めてのAnsible(2章:Playbook:始めてみよう)
初めてのAnsible(3章:インベントリ:サーバーの記述)
初めてのAnsible(4章:変数とファクト)
初めてのAnsible(7章:複雑なPlaybook)
ロール
- Ansibleでplaybookを複数のファイルに分割するための仕組み
- playbookをシンプルに記述し、再利用しやすくできる!
- 1つ以上のホストに割り当てるもの
- 例:データベースサーバとして動作するホストに
database
というロールを割り当てる
- 例:データベースサーバとして動作するホストに
ロールに関連づけられるファイル群
パス | 説明 |
---|---|
roles/role_name/tasks/main.yml | タスク群 |
roles/role_name/files | ホストにアップロードされるファイル群 |
roles/role_name/templates | Jinja2のテンプレートファイル群 |
roles/role_name/handlers/main.yml | ハンドラ群 |
roles/role_name/vars/main.yml | オーバーライドすべきでない変数群 |
roles/role_name/defaults/main.yml | オーバーライドできる変数群 |
roles/role_name/meta/main.yml | ロールに関する依存対象の情報 |
ロールを探す場所
- playbookが置かれているディレクトリの
roles
ディレクトリ - システム全体にわたるロールは
/etc/ansible/roles
playbook中でのロールの割り当て
playbook中でroles
セクションを置き、ロールのリストを指定すればよい
- name: role example
hosts: webservers
pre_tasks:
- shell: echo 'hello'
roles:
- { role: example_role, app_port: "{{ app_default_port }}" }
tasks:
- shell: echo 'still busy'
post_tasks:
- shell: echo 'goodbye'
上記の例では、ホストwebservers
に対してロールexample_role
を割り当てている
また、ロール呼び出しの際に{{ }}
で変数を渡すことも可能
この変数が vars/main.yml
や defaults/main.yml
ですでに定義されていた場合には渡された変数でオーバーライドされる
pre_tasks
/ post_tasks
ロールの呼び出し前後に何らかのタスクを実行したい場合に利用
依存ロール
- あるロールの依存する1つ以上のロールを指定できる
- 指定された依存対象のロールがまず実行されることを保証
roles/role_name/meta/main.yml
で以下のように指定
dependencies
- { role: ntp, ntp_server=ntp.ubuntu.com }
Ansible Galaxy
- 世界の誰かが書いてくれたロールを再利用可能に
- Ansible Galaxy | Browse Rolesから探してもってこれる
コマンドラインで一発。
$ ansible-galaxy install role_name
- デフォルトでは
/etc/ansible/roles
にインストールされる - インストール先を指定する場合には
-p path/to/roles
オブションを利用すればよい