Vagrant – Ansibleを使ってプロビジョニングする

Vagrantで作成した仮想マシンの環境構築を毎回手動で行うのは手間がかかりますが、プロビジョニングツールを使うとソフトウェアのインストールや各種設定が自動で行なえます。ここではAnsibleを使って環境構築をしてみます。

環境

  • macOS Sierra
  • Vagrant 2.0.0
  • Ubuntu 16.04

Vagrantfileの設定

Ansibleは単体で動作させる場合は、Ansibleにゲストマシンへの接続方法等を設定しなければいけませんが、VagrantからAnsibleを呼び出すことで接続周りの設定を省くことができます。Vagrantfileは次のようにします。ゲストマシン上でプロビジョニングを行うAnsible Localを使っています。

config.vm.provision "ansible_local" do |ansible|
 ansible.playbook = "provisioning/playbook.yml"
end

フォルダ構成

ここでは、Vagrantfileと同じ階層にprovisioningフォルダを置き、ansible関連のファイルを入れます。

- Vagrantfile
- provisioning
  - group_vars
  - roles
  - playbook.yml
  - ansible.cfg
  • group_vars rolesのユーザ値をここで定義します。
  • roles Ansible GalaxyからダウンロードしたRoleや自己定義のRoleを配置します。
  • playbook.yml Playbookです。
  • ansible.cfg Ansibleの設定ファイルです。

Ansible.cfg

ansible.cfgにAnsibleの設定を定義します。見本が ansible.cfg in source control にあります。ここではRoleの格納パスを指定しています。

# config file for ansible -- https://ansible.com/
# ===============================================

[defaults]

# roleのパス
roles_path = ./roles

playbook.yml

今はRoleが無いので、空のプレイブックを作っています。

---
- hosts: all
 tasks:
 - debug: msg="hello world"

仮実行

vagrant upで仮想マシンを立ち上げたあとに、vagrant provision でプロビジョニングを実行します。下のような感じで”hello world”が表示されれば成功です。

$ vagrant provision
PLAY [all] *********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [default]

TASK [debug] *******************************************************************
ok: [default] => {
    "msg": "hello world"
}

PLAY RECAP *********************************************************************
default                    : ok=2    changed=0    unreachable=0    failed=0