🖥
Ansible | インベントリとPlaybookとRoleの関係 ( Roleの基本と動作例 )
インベントリとPlaybookとRoleの関係は?
- Playbook が「対象のホスト」をインベントリから得る
- Playbook は「実際の動作部分」をRoleに委ねる
- Playbookは、MVCでいうコントローラーのようなイメージに近いかもしれない
何が良いの?
- 実行対象 ( インベントリ )
- 動作 ( Role )
- 「実行対象」と「動作」の組み合わせ ( Playbook )
このそれぞれをパーツ化することによって、柔軟に一連の処理を作ることが出来る。
- 仮にインベントリが存在しなかったら、Playbookに長大な対象ホストを書かなければいけない。
- 仮にRoleが存在しなかったら、複数のPlaybook同士で重複する処理があっても、共通化することが出来ない。
動作例
インベントリファイル
おなじみのインベントリファイルで、対象のホストをグループ化しておく。
[example]
0.0.0.0
0.0.0.1
Playbook
ここではPlaybookには直接タスクを書かず、Roleに処理を任せるようにする。
この例では「 example
グループに対して touch_file
というRoleを実行する」ということを Playbook で指定する。
---
- hosts: example
roles:
- touch_file
Role
実際の「動作部分」を受け持つ Roleを1個作ってみる。
ここでは簡潔に、ファイル作成だけをおこなわせる。
- name: touch file
shell: touch example.txt
ファイル階層は次のとおりにする。
roles/ロール名/tasks/main.yml
実行
インベントリとPlaybookを指定して ansible-playbook
コマンドを実効する。
このやり方はRoleを使う場合でも、使わない場合でも変わらない。
ansible-playbook -i inventory.txt playbook.yml
間違えの例
tasks/main.yml
に記述している以上、タスクであることは自明なので、YAMLのキーに tasks:
と書く必要はない。
tasks:
- name: touch file
shell: touch example.txt
ちなみに
Role には tasks 以外にも色々な要素を定義出来るが、ここでは無視して tasks だけを作った。
他のものはなくても動作する。
tasks/
handlers/
files/
templates/
vars/
defaults/
meta/
参考
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
公開日時
2017-09-28
Discussion