具有多个vm和提供者的Vagrantfile

时间:2015-11-05 08:45:56

标签: amazon-web-services vagrant

我正在尝试编写一个Vagrantfile,其中包含由多个提供程序备份的多台计算机。我特别希望能够一次性生成多台机器。基本上我想运行命令: vagrant up vb_vm aws_vm

我知道--provider标志,但这适用于正在生成的所有机器,因此在我的情况下不适用。

这是我的(非常精简但仍然有效)Vagrantfile:

Vagrant.configure(2) do |config|

  config.vm.define 'vb_vm' do |vb_vm|
    vb_vm.vm.box='ubuntu/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)

所以这表明产生多台提供商的多台机器确实可行,但提供商的选择是错误的。

我知道设置默认提供程序的技巧,但这只会让事情变得更糟(虚拟机在任何地方使用,根本不使用...)

我也知道旧的stackoverflow问题,但它们与Vagrant的旧版本有关。

所以问题是:我如何确保定义的每个框使用其正确的提供者?

1 个答案:

答案 0 :(得分: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

我单独创建每个VM

fhenri@machine:~/project/examples/vagrant/multimachine$ vagrant up db --provider=virtualbox
Bringing machine 'db' up with 'virtualbox' provider...
....
fhenri@machine:~/project/examples/vagrant/multimachine$ vagrant up app
Bringing machine 'app' up with 'vmware_fusion' provider...
....

然后我停止了所有事情,下次我做vagrant up

fhenri@machine:~/project/examples/vagrant/multimachine$ vagrant up
Bringing machine 'db' up with 'virtualbox' provider...
Bringing machine 'app' up with 'vmware_fusion' provider...

状态看起来不错

fhenri@machine:~/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`.