Vagrant: работа с несколькими машинами


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

Вот хороший  пример из документации:

Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline: "echo Hello"

  config.vm.define "web" do |web|
    web.vm.box = "apache"
  end

  config.vm.define "db" do |db|
    db.vm.box = "mysql"
  end
end

Таким образом можно задать любое необходимое количество машин. Стоит отметить, что если продолжить задавать свойства через переменную config, они будут применены ко всем машинам. Индивидуальные же свойства следует указывать в блоке с config.vm.define. Запускать машины можно будет и по-отдельности, например: vagrant up web.

Аналогично можно поступать, если у вас несколько проектов и для каждого свой Vagrantfile. Лично мне удобно держать именно отдельный отдельный файл в папке для каждого проекта, чтобы у каждого была своя независимая конфигурация, плюс можно легко поделиться им с
человеком, который захочет со мной совместно поработать.

В любом случае, перед тем как писать конфиг машины, добавляю блок с define с названием проекта, что позволяет мне не задумываясь запускать машины. Это делать вовсе не обязательно, но получается удобно, когда ты видишь, что имя машины не «default», а соответствует названию проекта. Если вдруг у двух проектов стали просматриваться точки интеграции, то для proof-of-concept могу запросто их объединить в один простым copy-paste (речь только о Vagrantfile конечно же :) ).

Кстати, насчет имени машины. Vagrant дает им совершенно сумасшедшие имена.

Чтобы дать нормальное имя, нужно в блоке vm.provider задать параметр name равным желаемому имени.

Пример:

zc.vm.provider "virtualbox" do |vb|
  vb.name = "zencity"
end

Даст соответствующий результат.