2015-11-05 40 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