我可能搞错了整个概念:我有一个运行 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。我想这是完全不同的问题,而且我没有以正确的方式使用它。但搜索后,我找不到任何解释如何正确执行此操作的内容。
答案1
使用 Chef 时,所有食谱必须在烹饪书中。看起来你可能已经在烹饪书中找到了它,只是叫错了,但我会介绍所有内容,这样你就可以仔细检查一下。
菜谱实际上只是食谱 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 "[email protected]"
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"
希望以上内容能够让事情变得清晰一些。