Сцепление бродячих файлов

У меня уже есть файл проекта projectpath/Vagrantfile и личный / глобальный ~/.vagrant.d/Vagrantfile

Я использую глобальный Vagrantfile для настройки определенных synced_folders для доступа к моим различным точечным файлам внутри виртуальной машины. Это определенно личные настройки, которые не следует смешивать с файлом проекта, которым делятся члены команды.

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

Я надеялся получить projectpath/my_vagrantfile.rb или что-нибудь подобное упало в тот же каталог (и будет в моем глобальном файле git-ignore)

Я подозреваю, что могу выполнить условное load из глобального Vagrantfile, но задавался вопросом, есть ли более чистый, более бродячий способ

1 ответ

Решение

В соответствии с документом о порядке загрузки и слияния:

Важно понять, как Vagrant загружает Vagrantfiles. Vagrant фактически загружает серию Vagrant-файлов, объединяя настройки по мере необходимости. Это позволяет Vagrant-файлам разной степени специфичности переопределять предыдущие настройки. Vagrant-файлы загружаются в порядке, указанном ниже. Обратите внимание, что если файл Vagrant не найден на каком-либо этапе, Vagrant переходит к следующему шагу.

  1. Vagrantfile упакован с коробкой, которая будет использоваться для данной машины.
  2. Vagrantfile в вашем домашнем каталоге Vagrant (по умолчанию ~/.vagrant.d). Это позволяет вам указать некоторые значения по умолчанию для вашего системного пользователя.
  3. Vagrantfile из каталога проекта. Это Vagrantfile, который вы будете модифицировать большую часть времени.
  4. Multi-машина переопределения, если таковые имеются.
  5. Специфичные для поставщика переопределения, если таковые имеются.

Если вы используете один и тот же блок с членами вашей проектной команды, 1. на самом деле это тоже не вариант.

Одним из решений будет создание этого projectpath/my_vagrantfile.rb (при условии, что projectpath/ - это папка вашего проекта, в которой есть каталог Vagrantfile и каталог.vagrant/ с информацией о ВМ).

Затем вы добавляете следующее в ваш глобальный Vagrantfile

if File.file?("#{Dir.pwd}/my_vagrantfile.rb")
  eval File.read("#{Dir.pwd}/my_vagrantfile.rb")
end

Недостатком является то, что он будет работать только если вы запустите vagrant от твоего projectpath каталог как Dir.pwd будет ссылаться на эту папку. (т.е. возвращает путь к текущему рабочему каталогу этого процесса в виде строки.) Если вы запустите vagrant up указав идентификатор виртуальной машины или позвонив из подпапки projectpath, он не сможет ссылаться на пользовательский my_vagrantfile.rb

Другие вопросы по тегам