Ubuntu
如何使用 Chef 和一個 .rb 文件配置一個 vagrant VM,其中包含說明
我可能把整個概念弄錯了:我有一個執行 Ubuntu 12.04 的 Vagrant VM,在它之上我想安裝一些包和配置文件。我在 Chef 中設置了它們,在路徑 cookbooks/my_project/recipes 我有一個包含所有說明的 vagrant-dev.rb 文件。現在我在 Vagrantfile 中的 Vagrant 配置一定是這裡的問題:
config.vm.provision :chef_solo do |chef| chef.cookbooks_path = "cookbooks/my_project/recipes" chef.add_recipe "vagrant-dev.rb" end
當我載入虛擬機時,我得到
FATAL: Chef::Exceptions::CookbookNotFound: Cookbook vagrant-dev.rb not found.
我試過最後沒有 .rb 。我想這是一個完全不同的問題,我沒有以正確的方式使用它。但是經過搜尋,我找不到任何解釋如何正確執行此操作的內容。
使用廚師時,所有食譜都必須在食譜中。看起來你可能已經在食譜裡有了它,只是說錯了,但我會涵蓋所有這些,所以你可以仔細檢查。
食譜實際上只是食譜 rb 文件、一些元數據和一些其他文件(如模板或數據包)的可選集合。所以你不能直接包含 .rb 文件,你必須引用它的說明書,然後是文件名(沒有 .rb)才能執行它。
一個簡單的食譜的結構應該如下所示:
SomeCookbook readme.md # needed for the long_description in metadata to work metadata.rb # contains the actual information for the cookbook recipes # Holds all the cookbook's recipies default.rb # This is the default recipe, run if one isn't specified otherRecipe.rb templates # Templates that can be called by the cookbook default some-erb-style-template.erb
主目錄的名稱無關緊要,模板目錄是可選的。
metadata.rb
name "SomeCookbook" maintainer "Me" maintainer_email "support@me.com" license "None" description "Does something cool" long_description IO.read(File.join(File.dirname(__FILE__), 'readme.md')) version "0.0.1" supports "centos"
遵循上述結構,並確保將您的食譜粘貼到食譜文件夾中。
然後將其添加到您的 vagrant 文件中:
chef.add_recipe "SomeCookbook::vagrant-dev"
希望以上內容能澄清一點。