Provisionerが実行される順番

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の設定よりも先に共通部分が実行されるようである。これは覚えていた方が良さそうだ。

以上。

■ 関連