Подтвердить что ты не робот

Как запустить несколько коробок с Vagrant?

Мне нужно запустить несколько ящиков с помощью Vagrant.

Есть ли способ сделать это?

Они никак не связаны друг с другом, их можно рассматривать как разные среды, используемые для тестирования, поэтому кажется, что настройка нескольких машин не имеет к этому никакого отношения.

4b9b3361

Ответ 1

Вы можете определенно запустить несколько брандмауэров одновременно, если их конфигурация не будет конфликтовать друг с другом каким-либо образом, например, отображение одних и тех же сетевых портов на хосте или использование одинаковых имен/идентификаторов ящиков внутри одного и того же провайдера. Нет никакой разницы между наличием нескольких ящиков, запущенных на провайдере вручную, например, несколькими блоками на VirtualBox или их регистрацией и запуском Vagrant. Результат тот же, Vagrant просто упрощает процесс.

Вы можете использовать так называемую многоадресную среду для управления этими ячейками вместе в одном проекте /Vagrantfile. Они не обязательно должны быть каким-то образом связаны, простота управления может быть одной причиной, например. если вам нужно запустить их в одно и то же время.

Или вы можете использовать отдельные проекты /Vagrantfiles и управлять машинами из своих соответствующих каталогов, полностью разделенных.

В случае запуска нескольких экземпляров одного и того же проекта вам нужно несколько копий каталога проекта, так как Vagrant хранит состояние ящика в каталоге .vagrant в проекте.

Ответ 2

Лучший способ - использовать массив хэшей . Вы можете определить массив следующим образом:

servers=[
  {
    :hostname => "web",
    :ip => "192.168.100.10",
    :box => "saucy",
    :ram => 1024,
    :cpu => 2
  },
  {
    :hostname => "db",
    :ip => "192.168.100.11",
    :box => "saucy",
    :ram => 2048,
    :cpu => 4
  }
]

Затем вы просто перебираете каждый элемент в массиве серверов и определяете конфиги:

Vagrant.configure(2) do |config|
    servers.each do |machine|
        config.vm.define machine[:hostname] do |node|
            node.vm.box = machine[:box]
            node.vm.hostname = machine[:hostname]
            node.vm.network "private_network", ip: machine[:ip]
            node.vm.provider "virtualbox" do |vb|
                vb.customize ["modifyvm", :id, "--memory", machine[:ram]]
            end
        end
    end
end

Ответ 3

Вам нужно просто скопировать каталог, содержащий Vagrantfile, в новое место и запустить vagrant up из него.

Убедитесь, что вы копируете каталог перед запуском коробки в первый раз, или Vagrant будет думать, что эти два местоположения относятся к одному и тому же полю. Или, если вы уже сделали vagrant up перед копированием каталога, удалите copied_directory/.vagrant после создания копии.

Ответ 4

Вы даже можете использовать разные Vagrantfile в том же каталоге для разных конфигураций или ящиков машины

VAGRANT_VAGRANTFILE=Vagrantfile.ubntu_1404_64 VAGRANT_DOTFILE_PATH=.vagrant_ub140464 vagrant up

ИЛИ

VAGRANT_VAGRANTFILE=Vagrantfile.ubntu_1404_32 VAGRANT_DOTFILE_PATH=.vagrant_ub140432 vagrant up

Оба Vagrantfile могут находиться в одном каталоге

Ответ 6

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

Тем не менее, вы можете не захотеть копировать/вставлять сценарии инициализации для целей отслеживания VCS-отслеживания/возврата. Храните все свои скрипты в папке, например. dev и поместите Vagrantfile под пронумерованные папки под dev, например. dev/10. Когда вы создаете более новую версию, например. dev/11 и не нужен более старый, вы можете просто удалить его. И обратитесь к общим сценариям обеспечения, используя относительный путь:

config.vm.provision "shell", path: "../provisioner.sh"