Vagrant + Ansible – Ansible GalaxyのRoleを使用する

Vagrant + Ansible環境で、Ansible GalaxyからダウンロードしたRoleの使用方法です。

環境のセットアップは、「Vagrant – Ansibleを使ってプロビジョニングする」と同様です。

環境

  • macOS Sierra
  • Vagrant 2.0.0
  • Ubuntu 16.04

目的

  • Ansible Galaxyに登録されている geerlingguy.firewall を使ってファイアーウォールをセットアップしてみます。

フォルダ構成

Vagrant用のフォルダ ~/vagrant/master は次の構成になっています。

- Vagrantfile
- provisioning
  - group_vars
  - roles
  - playbook.yml
  - ansible.cfg

Roleのパスを設定する

ansible.cfgにはRoleの格納パスを設定します。ここにAnsibleGalaxyからダウンロードしたRoleが置かれます。

[defaults]

# roleのパス
roles_path = ./roles

Ansible GalaxyからRoleをダウンロードする

まずはAnsibleの作業フォルダに移動し、ansible-galaxyコマンドでRoleをダウンロードします。

例として geerlingguy.firewall をダウンロードしてみます。インストール方法は同ページに書いてある通り、次のようにします。

cd ~/vagrant/master/provisioning
$ ansible-galaxy install geerlingguy.firewall

rolesフォルダにgeerlingguy.firewallがダウンロードされました。

このダウンロードされたRoleのコードを直接編集してしまうと、Roleを再ダウンロードするときに差分の調整が手間になるので、Roleは編集しないほうがよいかもしれません。

パラメータのユーザー値を定義する

ダウンロードされたRoleにはdefaultsフォルダがあるかと思います。ここにはデフォルトのパラメータが定義されています。

デフォルトのパラメータで用途に合わない場合は、group_varsフォルダにユーザー値を定義することで、デフォルトのパラメータをオーバーライドできます。

group_varsall.yml(任意の名前)を作り、そこにユーザー定義のパラメータを定義します。ここではfrewall_allowed_tcp_portsh変数の値を変更しています。

@all.yml

---
# all.yml

# geerlingguy.firewall
firewall_allowed_tcp_ports:
 - "22"
 - "80"
 - "443"

パラメータの変更の仕方は AnsibleGalaxyの各Roleのドキュメントを見ます。

実行するRoleを定義する

実行するRoleはplaybook.ymlに記述します。

Roleにはsudoユーザーで実行しなければいけないものと、通常ユーザーで実行するものがあります。この辺りはapt-getでインストールするときと同様です。

  • sudoユーザーになるには、become: yesを使います。
  • rolesに実行するRoleを記述します。
---
# sudo userで実行するRole
- hosts: all
  become: yes
  tasks:
  - debug: msg="sudo user role."
  roles:
  - geerlingguy.firewall

# 通常userで実行するRole
- hosts: all
  tasks:
  - debug: msg="normal user role."
  roles:
  # 今は何もなし

実行する

vagrant provisionで実行します。エラーなく実行できれば成功です。

$ vagrant provision
省略
PLAY RECAP *********************************************************************
default                    : ok=10  changed=5    unreachable=0    failed=0

もう一度vagrant provisionで実行すると、すでに全く同じ設定でインストールされているので changed=0として完了します。

$ vagrant provision
省略
PLAY RECAP *********************************************************************
default                    : ok=9    changed=0    unreachable=0    failed=0

これでファイアーウォールの設定ができました。パラメータを変えたら都度 vagrant provision を実行すればOKです。

その他のAnsibleGalaxyのRoleも同様の手順で実行できます。

以上。