我有一个 Chef (solo) recipe,它生成一个 CSS 文件并将其放在 web 根目录的某个位置(/vagrant/css
在我的例子中是在 VM 上)。问题是配方需要知道虚拟机上 vagrant 同步目录的绝对路径——它是一个文件夹,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 方法可以在配方代码中获取 VM 上的此同步目录路径?或者更笼统地说:有没有办法从 Chef 食谱中获取 Vagrant 特有的属性?
我搜索了 Vagrant 文档,但似乎只有一页关于该主题的页面,而且由于它是 Vagrant 特有的,因此Chef 文档中也没有相关信息。