У меня есть рецепт Chef (соло), который генерирует файл CSS и помещает его куда-нибудь в корневой веб-каталог (в моем случае /vagrant/css
на виртуальной машине). Проблема в том, что рецепт должен знать абсолютный путь к каталогу vagrant synced на виртуальной машине — это папка, в которой находится Vagrantfile
, и по умолчанию она сопоставляется с /vagrant
внутри виртуальной машины.
Я знаю, как установить этот путь:
Vagrant.configure("2") do |config|
config.vm.synced_folder ".", "/synced/dir/on/vm"
end
Но проблема в том, как сообщить рецепту, что /synced/dir/on/vm
.
В настоящее время я использую это:
Vagrant.configure("2") do |config|
config.vm.provision :chef_solo do |chef|
chef.json = {
"base_directory" => "/vagrant" # THIS IS IT
}
end
end
Это позволяет мне использовать node["base_directory"]
внутри кода рецепта, но у этого есть обратная сторона: если бы я написал несколько рецептов, было бы неудобно использовать node["base_directory"]
в каждом рецепте. Это намного лучше, чем жестко задавать путь, но это заставляет меня использовать один и тот же ключ на chef.json
для каждого рецепта.
Более того, если бы я захотел поделиться своим рецептом, я бы заставил пользователей использовать эту пару ключ/значение "base_directory" => "/vagrant"
в своих файлах Vagrantfile
.
Есть ли метод API для получения этого пути к синхронизированному каталогу на виртуальной машине в коде рецепта? Или, в более общем плане: есть ли способ получить специфичные для Vagrant свойства из рецептов Chef?
Я просмотрел документы Vagrant, но, похоже, там есть только одна страница по этой теме, а поскольку он специфичен для Vagrant, в документах Chef нет соответствующей информации.
node
- person sethvargo   schedule 28.11.2013