Vagrantにおいて表題の通り。先日のエントリで、複数のVMをひとつのVagrantfileで起動する場合、”define“の外に書いたprovisionerは共通に実行されることは確認した。今回は”define“の中と外、どちらで書いたものが先に実行されるかを確認しておく。
■ 環境
- Vagrant 1.7.4
■ Vagrantfile
先日と同じものであるが、今回は実験だけなので不要な箇所を削除した。
$ cat Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "chef/centos-6.6"
config.vm.define "zoo1" do |node|
node.vm.hostname = "zoo1"
node.vm.network "private_network", ip: "192.168.33.101"
node.vm.provision "shell", inline: "echo 1 >> /tmp/provision"
end
config.vm.define "zoo2" do |node|
node.vm.hostname = "zoo2"
node.vm.network "private_network", ip: "192.168.33.102"
end
config.vm.provision "shell", inline: "echo 2 >> /tmp/provision"
end
`/tmp/provision`ファイルに数字を`echo`で出力しているだけである。
■ 実行
前述のVagrantfileを用いてVMを起動する。2台のVMを起動する必要はないので1台だけを起動する。
$ vagrant up zoo1
:
==> zoo1: Mounting shared folders...
zoo1: /vagrant => /Users/withsin/work/project/test
==> zoo1: Running provisioner: shell...
zoo1: Running: inline script
==> zoo1: Running provisioner: shell...
zoo1: Running: inline script
$
ログインしてファイルを確認する。
$ vagrant ssh zoo1
[vagrant@zoo1 ~]$ cat /tmp/provision
2
1
[vagrant@zoo1 ~]$
上記の結果となっていた。
“define“で定義した個別VMの設定よりも先に共通部分が実行されるようである。これは覚えていた方が良さそうだ。
以上。