Сцепление бродячих файлов
У меня уже есть файл проекта projectpath/Vagrantfile
и личный / глобальный ~/.vagrant.d/Vagrantfile
Я использую глобальный Vagrantfile для настройки определенных synced_folder
s для доступа к моим различным точечным файлам внутри виртуальной машины. Это определенно личные настройки, которые не следует смешивать с файлом проекта, которым делятся члены команды.
Я ищу, чтобы иметь возможность добавить определенные личные настройки для каждого проекта. В частности, я добавляю дополнительные перенаправленные порты только для своих личных нужд, но я не хочу делать это для всех моих виртуальных машин.
Я надеялся получить projectpath/my_vagrantfile.rb
или что-нибудь подобное упало в тот же каталог (и будет в моем глобальном файле git-ignore)
Я подозреваю, что могу выполнить условное load
из глобального Vagrantfile, но задавался вопросом, есть ли более чистый, более бродячий способ
1 ответ
В соответствии с документом о порядке загрузки и слияния:
Важно понять, как Vagrant загружает Vagrantfiles. Vagrant фактически загружает серию Vagrant-файлов, объединяя настройки по мере необходимости. Это позволяет Vagrant-файлам разной степени специфичности переопределять предыдущие настройки. Vagrant-файлы загружаются в порядке, указанном ниже. Обратите внимание, что если файл Vagrant не найден на каком-либо этапе, Vagrant переходит к следующему шагу.
- Vagrantfile упакован с коробкой, которая будет использоваться для данной машины.
- Vagrantfile в вашем домашнем каталоге Vagrant (по умолчанию ~/.vagrant.d). Это позволяет вам указать некоторые значения по умолчанию для вашего системного пользователя.
- Vagrantfile из каталога проекта. Это Vagrantfile, который вы будете модифицировать большую часть времени.
- Multi-машина переопределения, если таковые имеются.
- Специфичные для поставщика переопределения, если таковые имеются.
Если вы используете один и тот же блок с членами вашей проектной команды, 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