前回の記事
Ansibleロールとは
今回はAnsibleのロールを試してみます。
私の中でロールというとAWSのIAMロールやVMwareのロールをイメージしてしまい
権限をセットしてアカウントに付与するものみたいなイメージがありますが
Ansibleでのロールはプレイブック内のタスク細分化みたいな感じです。
例えば前回作成した以下のプレイブックの場合で見てみます。
- hosts: all
vars:
sname: httpd
tasks:
- name: httpインストール
yum:
name={{sname}}
state=present
- name: serviceスタート
service:
name=httpd
state=started
- name: FW無効化
service:
name=firewalld
state=stopped
このプレイブックではタスクとして以下の3個があります。
- httpdのインストール
- httpdサービスのスタート
- FWの無効化
これをロールで細かく分けて作成することができます。
イメージとしてはこんな感じですね。
まぁぶっちゃけこのサンプルテストブックでは大したことやっていないので
分けるメリットが無いのですが実際に業務等で使用する場合は使えそうですね。
例えば
- 責任分界点が明確になる
- 関連する動作やアクションだけでまとめることにより記述ミスが減る(インストールだけのロール等)
- 2できれいにまとめていればレビューもやりやすい
- メインプレイブック側で呼び出すロールを選ぶことで用途に合わせたプレイブックを作成できる
上手くロール側の設計をしておけば柔軟に使えそうですね。
ロールを使って動作を試してみる
前回試したhttpdインストール、サービス起動、FW停止の
プレイブックをロールを使った形にして動作を試してみます。
/home/workのディレクトリを作業ディレクトリとして作成しています。
- コマンドで実行するプレイブック
/home/work/main.yml
- hosts: all
roles:
- install
- service
- fw
- httpdインストールするロール
/home/work/roles/install/tasks/main.yml
---
- name: httpインストール
yum:
name: httpd
state: present
- httpdサービスを起動するロール
/home/work/roles/service/tasks/main.yml
---
- name: serviceスタート
service:
name: httpd
state: started
- FWを停止するロール
/home/work/roles/fw/tasks/main.yml
---
- name: FW無効化
service:
name=firewalld
state=stopped
↓の二つの書き方はどちらでもよいみたい
name: firewalld
name=firewalld
ツリーコマンドで表示するとこのようになります。
デフォルト設定ではロールの名前はmain.ymlとする必要があり
フォルダもロール名/tasks/main.ymlにする必要があるようです。
実行
2回目