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