是否可以在Vagrantfile中使用多个config.vm.box?

时间:2015-06-20 21:51:54

标签: vagrant vagrantfile

我创建了一个具有一些服务器设置和自定义的VM,并使用了vagrant to 创建一个盒子。我把盒子装进了流浪汉,所以我可以旋转不止一个 具有相同配置的服务器。

还创建了一个具有客户端设置的VM,并将其与vagrant一​​起装箱,以便我可以创建 多个客户。

我想知道是否可以在同一个Vagrantfile 块中使用 使用server_box的服务器代码和客户端的代码块 使用client_box。我虽然可以为每个人使用 config.vm.box 但是什么时候 我启动虚拟机,客户端拿起client_box映像,这就是我 想要,但服务器也会忽略自己的设置来获取client_box图像。

我的尝试如下。 注意:我知道我可以使用循环来创建一系列客户端。为了简单和清晰,我只是将代码放在下面。

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "server_box"
  config.vm.define "server1", primary: true do |server1|
    [...vm specs here...]
  end
end


Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "client_box"

  config.vm.define "client1", autostart: false do |client1|
    [...vm specs here...]
  end

  config.vm.define "client2", autostart: false do |client2|
    [...vm specs here...]
  end

end

1 个答案:

答案 0 :(得分:1)

是的,您可以使用config.vm.define方法调用指定多台计算机,例如

Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline: "echo Hello"

  config.vm.define "web" do |web|
    web.vm.box = "apache"
  end

  config.vm.define "db" do |db|
    db.vm.box = "mysql"
  end
end

请参阅:Defining multiple machines at Vagranup Docs

您还可以使用switch case语法,因此您可以根据某个变量设置box,例如

case provider
  when "virtualbox"
    config.vm.box = "ubuntu/wily64"
  when "aws"
    config.vm.box = "dummy"
end

或者根据环境变量设置web.vm.box,例如

config.vm.box = ENV['BOX']

并从命令行提供值,如:

BOX=server_box vagrant up

另请参阅:Multiple provisioners in a single vagrant file?