我有一个厨师(独奏)配方,它会生成一个CSS文件并将其放到Web根目录(在我的案例中为虚拟机上的/vagrant/css
)。问题是配方需要知道虚拟机上的流浪同步目录的绝对路径 - 它是一个文件夹,其中Vagrantfile
是虚拟目录,默认情况下它映射到虚拟机内的/vagrant
。以编程方式获得厨师独奏配方中的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"]
的配方里面的代码,但是有一个缺点是:如果我是写多个配方,将它inconvinient使用node["base_directory"]
在每一个配方。硬编码路径要好得多,但它迫使我在chef.json
上为每个配方使用相同的密钥。此外,如果我希望分享我的配方,我会强制用户在其Vagrantfile
中使用该"base_directory" => "/vagrant"
键/值组。
是否有一种API方法在配方代码中的虚拟机上获取此同步目录路径?或者更一般地说:有没有一种方法可以从厨师食谱中获得Vagrant特有的属性?
我搜索了流浪病人的文档,但似乎只有一个single page on that topic,并且因为它特定于流浪者,所以Chef docs也没有相关信息。
我也很想知道这一点。它看起来像曾经有这样做的一些方法,但它不再工作了:https://github.com/aespinosa/workstation-vagrant/blob/master/site-cookbooks/workstation/attributes/default.rb #L23和https://github.com/xforty/chef-drupal/blob/master/recipes/default.rb#L31 – alanthing 2013-06-29 01:42:15
这不是很清楚为什么您要将VM上生成的文件放回到安装的文件夹中来自主机。如果您只需将文件放在“已知”位置,可以使用Chef :: Config [:file_cache_path]。另一个想法是: – CAB 2013-10-10 18:45:32
。如果其他配方需要知道特定CSS文件的结束位置,请向css配方添加一个属性,如default [:cssrecipe] [:cssdir] =“”。在Vagrantfile json属性中做到这一点; chef.json = {:cssrecipe => {:cssdir => [“/ vagrant”]}}。在其他食谱的属性文件中这样做; include_attribute“cssrecipe”。在这些食谱中,您现在可以使用节点[:cssrecipe] [:cssdir]。这对于需要在每个Vagrantfile中使用chef.json来说并不难,但它使得配方之间的关系更容易理解。 – CAB 2013-10-10 18:53:34