2015-11-05 92 views
1

我想寫一個Vagrantfile多機備份由多個供應商。我特別希望能夠一次性產生多於一臺這樣的機器。基本上,我想要運行的命令: vagrant up vb_vm aws_vmVagrantfile多個VM和供應商

我知道--provider標誌,但這將被應用到人丁所有機器,因此並不適用於我的情況。

這是我的(很下調,但仍然有效)Vagrantfile:

Vagrant.configure(2) do |config| 

    config.vm.define 'vb_vm' do |vb_vm| 
    vb_vm.vm.box='unbuntu/trusty64' # from hashicorp 

    vb_vm.vm.provider :virtualbox do |v| 
    end 
    end 

    config.vm.define 'aws_vm' do |aws_vm| 
    aws_vm.vm.box = "aws/dummy" 
    aws_vm.vm.box_url = 'https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box' 

    aws_vm.vm.provider :aws do |a, override| 
     a.access_key_id = 'something' 
     a.secret_access_key = 'something' 
     a.ami='something' 
    end 
    end 
end 

一個vagrant box list顯示,用於每個定義的框是正確的類型:

aws/dummy  (aws, 0) 
ubuntu/trusty64 (virtualbox, 20150928.0.0) 

vagrant status給我(請注意,我有可用的LXC插件,這成爲默認)

當前機器狀態:

aws_vm     not created (aws) 
vb_vm      not created (lxc) 

因此,這表明產卵多個提供者的機器確實是可能的,但提供者的選擇是錯誤的。

我知道的招數來設置默認提供的,但這隻能使事情變得更糟(使用VirtualBox的到處都是,根本不使用AWS ...)

我所知道的老計算器問題,以及,但它們與更老版本的流浪者有關。

所以現在的問題是:我該如何確保定義的每個框使用其適當的供應商?

回答

0

的訣竅是用自己的供應商創建VM。

例子:我曾與盒定義的快捷Vagrantfile(最小化)爲每個提供

Vagrant.configure(2) do |config| 
    config.vm.define "db" do |db| 
    db.vm.box = "..." 
    db.vm.hostname = "db" 
    end 

    config.vm.define "app", primary: true do |app| 
    app.vm.box = "..." 
    app.vm.hostname = "app" 

    app.ssh.forward_agent = true 
    app.ssh.forward_x11 = true 

    app.vm.provider "vmware_fusion" do |vm| 
     vm.vmx["memsize"] = "4096" 
    end 
    end 
end 

我創建的每個虛擬機單獨

[email protected]:~/project/examples/vagrant/multimachine$ vagrant up db --provider=virtualbox 
Bringing machine 'db' up with 'virtualbox' provider... 
.... 
[email protected]:~/project/examples/vagrant/multimachine$ vagrant up app 
Bringing machine 'app' up with 'vmware_fusion' provider... 
.... 

然後我停止一切,下一次我做vagrant up

[email protected]:~/project/examples/vagrant/multimachine$ vagrant up 
Bringing machine 'db' up with 'virtualbox' provider... 
Bringing machine 'app' up with 'vmware_fusion' provider... 

和狀態看起來不錯

[email protected]:~/project/examples/vagrant/multimachine$ vagrant status 
Current machine states: 

db      running (virtualbox) 
app      running (vmware_fusion) 

This environment represents multiple VMs. The VMs are all listed 
above with their current state. For more information about a specific 
VM, run `vagrant status NAME`. 
+0

這是我所擔心的。有一點,即使這個盒子是爲正確的提供者定義的,你也需要添加--provider。但有用的技巧與停止/向上,謝謝! – Guillaume