Как запустить несколько коробок с Vagrant?
Мне нужно запустить несколько ящиков с помощью Vagrant.
Есть ли способ сделать это?
Они никак не связаны друг с другом, их можно рассматривать как разные среды, используемые для тестирования, поэтому кажется, что настройка нескольких машин не имеет к этому никакого отношения.
Ответы
Ответ 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 могут находиться в одном каталоге
Ответ 5
https://www.vagrantup.com/docs/vagrantfile/tips.html#loop-over-vm-definitions
(1..3).each do |i|
config.vm.define "node-#{i}" do |node|
node.vm.provision "shell",
inline: "echo hello from node #{i}"
end
end
Ответ 6
Копирование каталога, содержащего Vagrantfile, на новое место и разворачивание новой машины, является наиболее прямым способом, если машины не взаимодействуют.
Тем не менее, вы можете не захотеть копировать/вставлять сценарии инициализации для целей отслеживания VCS-отслеживания/возврата. Храните все свои скрипты в папке, например. dev
и поместите Vagrantfile
под пронумерованные папки под dev
, например. dev/10
. Когда вы создаете более новую версию, например. dev/11
и не нужен более старый, вы можете просто удалить его. И обратитесь к общим сценариям обеспечения, используя относительный путь:
config.vm.provision "shell", path: "../provisioner.sh"