Vagrantで必要なものがインストール済みのboxを配布するにはAtlasを使うと楽ですが、外部に公開されることになるので、ものによっては適さない場合があります。
イントラネット内の共有フォルダなどにboxをおいて、それを使うといった方法もありますが、容量がそれなりに必要になりますし、管理もちょっと面倒です。
ということで、
- ベースとなるboxは公開されているもの
- ベースに対して構成管理ツール(Ansibleなど)を利用してセットアップ (構成管理+Vagrantfileをリビジョン管理)
がよさそうだなぁと思い、Vagrant の Ansible Provisioning を使おうと思いましたが、、
ホストOS(Windows)からAnsibleを実行するとなると、一気に面倒(そのためにcygwin入れるのは手間が…)になるので、Provisioning は shellにして、ゲストOS側でAnsibleを実行するようにしてみました。
単にshellでAnsibleを実行するようVagrantfile
を書くだけです。
Vagrant.configure(2) do |config| config.vm.box = "bento/centos-7.1" config.vm.synced_folder ".", "/vagrant", create: true, mount_options: ['dmode=777','fmode=666'] config.vm.provision "shell", inline: <<-SHELL yum install -y epel-release yum install -y ansible cd /vagrant ansible-playbook -i hosts playbook.yml SHELL end
AnsibleのplaybookとVagrantfile
もまとめてリポジトリで管理すれば、それをチェックアウトしてvagrant up
するだけで環境が簡単にセットアップできます。
下記をclone
してvagrant up
すると、CentoOS 7.1上にPostgreSQL 9.5がインストールされた環境が立ち上がります。
なお、Vagrantの共有フォルダ(/vagrant
)は、デフォルトのパーミッションが777となり、hosts
に実行権限がついているためにエラーとなります。
==> default: ERROR: The file hosts is marked as executable, but failed to execute correctly. If this is not supposed to be an executable script, correct this with `chmod -x hosts`.
これを回避するには、Vagrantfile
のconfig.vm.synced_folder
の設定で、mount_options
のfmode
として実行権限を外してあげる必要があります。
config.vm.synced_folder ".", "/vagrant", create: true, mount_options: ['dmode=777','fmode=666']