Vagrant 是否可以在一个文件中使用多个config.vm.box?

Vagrant 是否可以在一个文件中使用多个config.vm.box?,vagrant,vagrantfile,Vagrant,Vagrantfile,我用一些服务器设置和定制创建了一个VM,并使用vagrant 创建一个框。我把这个盒子装进了流浪汉,这样我可以旋转不止一个 具有相同配置的服务器 还创建了一个具有客户端设置的VM,并使用vagrant将其装箱,以便我可以创建 多个客户端 我想知道是否可能在同一个文件中有一个块 使用server_框的服务器代码和客户端代码块 使用“客户端”对话框。我想我可以为每一个使用config.vm.box,但当 我旋转虚拟机,客户机拾取客户机盒映像,这就是我所做的 需要,但服务器也会忽略其自身的设置来拾取客

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

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

我想知道是否可能在同一个文件中有一个块 使用server_框的服务器代码和客户端代码块 使用“客户端”对话框。我想我可以为每一个使用config.vm.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

是的,您可以使用
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
见:


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

case provider
  when "virtualbox"
    config.vm.box = "ubuntu/wily64"
  when "aws"
    config.vm.box = "dummy"
end
config.vm.box = ENV['BOX']

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

case provider
  when "virtualbox"
    config.vm.box = "ubuntu/wily64"
  when "aws"
    config.vm.box = "dummy"
end
config.vm.box = ENV['BOX']
并从命令行提供值,如:

BOX=server_box vagrant up


另请参见:

是否有理由不能将所有框放在一个Vagrant.configure块中,然后通过执行
server1.vm.box=“server\u box”
等操作以常规方式覆盖这些框?即,在?中概述的方法,我已阅读了链接中的信息。是的,在单个块中,您可以首先放置config.vm.box=“server\u-box”行并启动服务器,然后编辑Vagrant文件并将该行更改为config.vm.box=“client\u-box”以启动客户端,但这并不是我想象的自动化方式。我希望它能更无缝。现在,如果Vagrantfile采用命令行参数使其更具动态性,那将更有趣;有像config1.vm.box、config2.vm.box这样的变量,在CLI上说--config1=server\u box,--config2=client\u box。但是您可以为每台机器重载config.vm.box吗?例如,对于服务器VM,您指定
server.VM.box=“server\u-box”
,对于客户端1,您指定
client1.VM.box=“client\u-box”
,对于客户端2,您指定
client2.VM.box=“client\u-box
等。这对您不起作用吗?从链接“如您所见,config.VM.define使用另一个变量执行一个块。此变量(如上面的web)与配置变量完全相同,只是内部变量的任何配置仅适用于所定义的机器。因此,web上的任何配置只会影响web计算机。”