我有一个非常简单的Vagrantfile
。基本上,它是删除了大量内容的默认文件,也是一个超级简单的内联shell配置程序:
Vagrant.configure("2") do |config|
config.vm.define "test" do |test|
test.vm.box = "precise64"
test.vm.box_url = "http://files.vagrantup.com/precise64.box"
test.vm.network :forwarded_port, guest: 3000, host: 3000
test.vm.network :private_network, ip: "192.168.33.100"
test.vm.provider :virtualbox do |vb|
vb.customize [ "modifyvm", :id, "--cpus", 2 ]
vb.customize [ "modifyvm", :id, "--memory", 1024 ]
end
test.vm.provision :shell, :inline => "echo \"Hello world!\""
end
end
当我第一次运行vagrant up
时,机器被创建,启动并且shell配置程序按预期运行:控制台上的最后一行显示Hello world!
。
现在,如果我第二次运行vagrant halt
和vagrant up
,机器会启动,但不会运行配置程序。至少没有消息打印到终端。
在我看来,这与Vagrant documentation相反,后者表示:
配置程序分为三种情况:
vagrant up
,vagrant reload
和vagrant provision
。
为什么脚本没有运行?
答案 0 :(得分:4)
How to run Vagrant provisioning on the first run?回答了我的问题。显然这是Vagrant前段时间的变化......
答案 1 :(得分:3)
我不确定这是否已更改,但是对于shell脚本,您还可以使用run: "always"
标志来确保shell脚本被执行at all times。
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: "echo hello",
run: "always"
end