Ubuntu

如何使用 Chef 和一個 .rb 文件配置一個 vagrant VM,其中包含說明

  • September 15, 2013

我可能把整個概念弄錯了:我有一個執行 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"

希望以上內容能澄清一點。

引用自:https://serverfault.com/questions/539074