解决 chef-solo 食谱依赖关系
Resolving chef-solo cookbook dependencies
我正在尝试 运行 在我的工作站上独奏以在本地应用一些设置。我的食谱取决于我在 metadata.rb 和 Berksfile 中指定的几本外部食谱。 chef-client 运行 失败并显示以下错误消息。
我想知道是否有一种方法可以在 chef-solo 运行s 时自动下载依赖项?
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]" ]
}
伯克斯文件
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'
chef-solo 没有为此内置任何内容,因为下载管理是 chef-client 为您处理的事情之一,因此您专门选择退出该功能。不过,制作一个调用 berks vendor cookbooks/
的包装脚本非常容易,然后将 chef-solo 对准该文件夹。
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
文件夹的位置指定不同的位置。
您可能还想知道为什么必须指定两次依赖项,一次在 Berksfile
中,一次在 metadata.rb
文件中。我也是 ;)
我正在尝试 运行 在我的工作站上独奏以在本地应用一些设置。我的食谱取决于我在 metadata.rb 和 Berksfile 中指定的几本外部食谱。 chef-client 运行 失败并显示以下错误消息。
我想知道是否有一种方法可以在 chef-solo 运行s 时自动下载依赖项?
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]" ]
}
伯克斯文件
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'
chef-solo 没有为此内置任何内容,因为下载管理是 chef-client 为您处理的事情之一,因此您专门选择退出该功能。不过,制作一个调用 berks vendor cookbooks/
的包装脚本非常容易,然后将 chef-solo 对准该文件夹。
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
文件夹的位置指定不同的位置。
您可能还想知道为什么必须指定两次依赖项,一次在 Berksfile
中,一次在 metadata.rb
文件中。我也是 ;)