LoginSignup
12
8

More than 1 year has passed since last update.

Ansible | インベントリとPlaybookとRoleの関係 ( Roleの基本と動作例 )

Last updated at Posted at 2017-09-28

インベントリとPlaybookとRoleの関係は?

  • Playbook が「対象のホスト」をインベントリから得る
  • Playbook は「実際の動作部分」をRoleに委ねる
  • Playbookは、MVCでいうコントローラーのようなイメージに近いかもしれない

何が良いの?

  • 実行対象 ( インベントリ )
  • 動作 ( Role )
  • 「実行対象」と「動作」の組み合わせ ( Playbook )

このそれぞれをパーツ化することによって、柔軟に一連の処理を作ることが出来る。

image.png

  • 仮にインベントリが存在しなかったら、Playbookに長大な対象ホストを書かなければいけない。
  • 仮にRoleが存在しなかったら、複数のPlaybook同士で重複する処理があっても、共通化することが出来ない。

動作例

インベントリファイル

おなじみのインベントリファイルで、対象のホストをグループ化しておく。

inventory.txt
[example]
0.0.0.0
0.0.0.1

Playbook

ここではPlaybookには直接タスクを書かず、Roleに処理を任せるようにする。

この例では「 example グループに対して touch_file というRoleを実行する」ということを Playbook で指定する。

playbook.yml
---
- hosts: example
  roles:
    - touch_file

Role

実際の「動作部分」を受け持つ Roleを1個作ってみる。
ここでは簡潔に、ファイル作成だけをおこなわせる。

roles/touch_file/tasks/main.yml
- 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: と書く必要はない。

roles/touch_file/tasks/main.yml
tasks:
  - name: touch file
    shell: touch example.txt

ちなみに

Role には tasks 以外にも色々な要素を定義出来るが、ここでは無視して tasks だけを作った。
他のものはなくても動作する。

tasks/
handlers/
files/
templates/
vars/
defaults/
meta/

参考

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

Twitter

12
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8