2015-11-05 3 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 не используется вообще ...)

Я знаю старых вопросы StackOverflow, а также , но они связаны с гораздо более старой версией Vagrant.

Итак, вопрос в следующем: как я могу убедиться, что в каждом конкретном поле используется его надлежащий провайдер?

ответ

0

Трюк будет заключаться в создании виртуальной машины с помощью собственного провайдера.

пример: Я определил быстрый 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