我有一個廚師(獨奏)配方,它會生成一個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