解决chef-solo菜谱依赖关系问题

3

我正在尝试在我的工作站上运行chef solo,以便本地应用一些设置。我的配方取决于几个外部烹饪书,我在metadata.rb和Berksfile中都指定了这些书。下面是chef-client运行失败的错误消息。

我想知道是否有一种方法可以在chef-solo运行时自动下载依赖项?

user@ubuntu:~/chef-solo$ chef-solo -c solo.rb -j solo.json

Starting Chef Client, version 12.8.1
Installing Cookbook Gems:
Compiling Cookbooks...

Running handlers:
[2016-03-28T16:32:36+00:00] ERROR: Running exception handlers
Running handlers complete
[2016-03-28T16:32:36+00:00] ERROR: Exception handlers complete
Chef Client failed. 0 resources updated in 03 seconds
[2016-03-28T16:32:36+00:00] FATAL: Stacktrace dumped to /home/user/chef-solo/chef-stacktrace.out
[2016-03-28T16:32:36+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
[2016-03-28T16:32:36+00:00] ERROR: Cookbook apt not found. If you're loading apt from another cookbook, make sure you configure the dependency in your metadata

solo.rb

root = File.absolute_path(File.dirname(__FILE__))
file_cache_path root
cookbook_path root + '/cookbooks'

solo.json

{
    "run_list": [ "recipe[test::default]" ]
}

Berksfile

source 'https://supermarket.chef.io'

cookbook 'apt'
metadata

metadata.rb

name 'test'
maintainer 'The Authors'
maintainer_email 'you@example.com'
license 'all_rights'
description 'Installs/Configures test'
long_description 'Installs/Configures test'
version '0.1.0'

depends 'apt'

你在 Stack Overflow 上提出这个问题的方式非常好,它实际上帮助我为自己找到了解决方案! - Ninjaxor
2个回答

3

Berkshelf是Chef世界中流行的工具,用于自动安装cookbook依赖项(你提到的Berksfile与此相关)。如果还没有安装,请安装berkshelf。

$ gem install berkshelf

请注意您的solo.rb文件中有一行代码...
cookbook_path root + '/cookbooks'

这就是Chef希望您放置依赖项的位置。如果没有Berkshelf,您需要使用Knife将apt安装到那个cookbooks文件夹中(注意:cookbooks/必须是一个Git存储库...)

$ knife cookbook site install apt

但是由于您有一个Berksfile文件,因此您可能希望在与Berksfile文件相同的文件夹中使用以下命令...

$ berks vendor ../

这将在父目录中为当前文件夹安装依赖项。根据您的根cookbooks文件夹的位置,您可能需要指定不同的位置。

您可能还想知道为什么必须在Berksfilemetadata.rb文件中分别指定依赖项。我也是这样想的 ;)


0

chef-solo本身并没有内置下载管理功能,因为这是由chef-client处理的一项任务,所以您需要明确地选择不使用该功能。不过,很容易编写一个包装脚本来调用berks vendor cookbooks/,然后将chef-solo指向该文件夹。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接