解决厨师 - 独奏食谱依赖关系

时间:2016-03-28 16:57:10

标签: dependencies chef chef-solo cookbook

我正在尝试在我的工作站上运行厨师独奏以在本地应用一些设置。我的配方取决于我在metadata.rb和Berksfile中指定的几个外部cookbook。 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'

2 个答案:

答案 0 :(得分:3)

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

$ gem install berkshelf

请在solo.rb文件中注明说明......

的行
cookbook_path root + '/cookbooks'

......那是Chef要求你放置依赖项的地方。如果没有Berkshelf,您需要使用knife将apt安装到cookbook文件夹中。 (注意:cookbook /必须是git repo ...)

$ knife cookbook site install apt

但是既然你有一个Berksfile,你很可能想在Berksfile所在的同一个文件夹中使用下面的命令...

$ berks vendor ../

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

您可能还想知道为什么必须两次指定依赖项,一次在Berksfile中,一次在metadata.rb文件中。我也是;)

答案 1 :(得分:0)

没有内置于chef-solo的内容,因为下载管理是Chef-client为您处理的事情之一,因此您特别选择退出该功能。制作一个调用berks vendor cookbooks/的封装脚本非常容易,然后将cook-solo对准该文件夹。