1

我有一个很简单的Vagrantfile. 基本上,它是删除了很多东西的默认文件和一个超级简单的内联外壳配置器:

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 haltvagrant up机器会启动,但不会运行配置程序。至少没有消息被打印到终端。

在我看来,这与Vagrant 文档相反,该文档指出:

Provisioner 在三种情况下运行:vagrant upvagrant reloadvagrant provision

为什么脚本没有运行?

4

2 回答 2

4

如何在第一次运行时运行 Vagrant 配置?回答我的问题。显然这是前一段时间 Vagrant 的变化……</p>

于 2013-10-21T13:46:52.563 回答
3

我不确定这是否已经改变,但关于 shell 脚本,您还可以使用该run: "always"标志来确保 shell 脚本始终被执行。

Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline: "echo hello",
    run: "always"
end
于 2015-04-24T16:15:12.223 回答