在Vagrantfile中为同一个块指定两个提供程序

时间:2014-05-02 08:44:17

标签: ruby vagrant vmware

在我的Vagrantfile中,我配置了Virtualbox和VMware。由于Windows / Linux和Mac的VMware提供商有不同的名称(vmware_workstation,vmware_fusion),但使用相同的下载框,我发现自己两次配置相同的配置。

config.vm.provider "vmware_fusion" do |v, override|
    v.vmx["memsize"] = "1024"
    v.vmx["numvcpus"] = "1"
end

config.vm.provider "vmware_workstation" do |v, override|
    v.vmx["memsize"] = "1024"
    v.vmx["numvcpus"] = "1"
end

允许我将这两者组合成一个块的语法是什么,如:

config.vm.provider in ["vmware_fusion", "vmware_workstation"] do |v, override|
   v.vmx["memsize"] = "1024"
   v.vmx["numvcpus"] = "1"
end

非常感谢。

2 个答案:

答案 0 :(得分:1)

这应该有效:

["vmware_fusion", "vmware_workstation"].each do |vmware_provider|
  config.vm.provider vmware_provider do |v, override|
    v.vmx["memsize"] = "1024"
    v.vmx["numvcpus"] = "1"
  end
end

答案 1 :(得分:0)

看起来像are restricted to one provider per machine (bottom of the page),但在多机环境中,您可以为每台计算机指定一个提供程序

所以也许你可以做类似

的事情
Vagrant.configure("2") do |config|

  machines = [
    { name: "machine1_fusion", provider: "vmware_fusion" },
    { name: "machine1_workstation", provider: "vmware_workstation" }
  ]

  machines.each do |machine|
    config.vm.define machine[:name] do |m|
      ... #box config etc
      m.vm.provider machine[:provider] do |p|
        p.vmx["memsize"] = "1024"
        p.vmx["numvcpus"] = "1"
      end
    end
  end
end