如何使用 Chef 和包含说明的 .rb 文件配置 vagrant VM

如何使用 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。我想这是完全不同的问题,而且我没有以正确的方式使用它。但搜索后,我找不到任何解释如何正确执行此操作的内容。

答案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"

希望以上内容能够让事情变得清晰一些。

相关内容