在 AWS Opsworks 上使用 Chef 12 无法找到 Chef Community Cookbooks
Failing To Find Chef Community Cookbooks Using Chef 12 On AWS Opsworks
问题
当 AWS OpsWorks 上的 运行 自定义说明书出现 setup_failed
状态时,实例和失败日志中显示以下内容:
[2016-03-26T22:53:48+00:00] INFO: Started chef-zero at chefzero://localhost:8889 with repository at /var/chef
One version per cookbook
data_bags at /var/chef/runs/62832572-cb67-421a-8309-d831140d7b98/data_bags
nodes at /var/chef/runs/62832572-cb67-421a-8309-d831140d7b98/nodes
[2016-03-26T22:53:48+00:00] INFO: Forking chef instance to converge...
[2016-03-26T22:53:48+00:00] INFO: *** Chef 12.7.2 ***
[2016-03-26T22:53:48+00:00] INFO: Chef-client pid: 17842
[2016-03-26T22:53:49+00:00] INFO: HTTP Request Returned 404 Not Found: Object not found: chefzero://localhost:8889/nodes/test1.localdomain
[2016-03-26T22:53:49+00:00] INFO: Setting the run_list to ["recipe[my_cookbook::default]"] from CLI options
[2016-03-26T22:53:49+00:00] INFO: Run List is [recipe[my_cookbook::default]]
[2016-03-26T22:53:49+00:00] INFO: Run List expands to [my_cookbook::default]
[2016-03-26T22:53:49+00:00] INFO: Starting Chef Run for test1.localdomain
[2016-03-26T22:53:49+00:00] INFO: Running start handlers
[2016-03-26T22:53:49+00:00] INFO: Start handlers complete.
[2016-03-26T22:53:49+00:00] INFO: HTTP Request Returned 404 Not Found: Object not found:
[2016-03-26T22:53:49+00:00] INFO: HTTP Request Returned 412 Precondition Failed: No such cookbook: apt
================================================================================
Error Resolving Cookbooks for Run List:
================================================================================
Missing Cookbooks:
------------------
No such cookbook: apt
Expanded Run List:
------------------
* my_cookbook::default
OpsWorks 堆栈已配置
- 厨师 12
- 使用自定义 Chef 食谱
- 为自定义说明书使用 Git 存储库
自定义食谱回购
为了找到问题的原因,创建了一个食谱,其中包含一个运行 apt-get update
的食谱(在 kitchen converge
下按预期运行)。这些文件是使用 chef generate cookbook my_cookbook
:
创建的
.
└── my_cookbook
├── Berksfile
├── chefignore
├── metadata.rb
├── README.md
├── recipes
│ └── default.rb
├── spec
│ ├── spec_helper.rb
│ └── unit
│ └── recipes
│ └── default_spec.rb
└── test
└── integration
├── default
│ └── serverspec
│ └── default_spec.rb
└── helpers
└── serverspec
└── spec_helper.rb
唯一改变的文件是:
my_cookbook/Berksfile
source 'https://supermarket.chef.io'
metadata
cookbook 'apt'
my_cookbook/metadata.rb
...
depends 'apt', '~> 3.0.0'
my_cookbook/recipes/default.rb
include_recipe 'apt::default'
此外,Berksfile 已添加到存储库的根目录中
source 'https://supermarket.chef.io'
cookbook 'apt'
当前的解决方法
当前的解决方法包括使用 berks vendor
下载依赖项,然后将下载的说明书复制到存储库的根目录中,即:
.
├── Berksfile
├── apt
└── my_cookbook
是否有更好的解决方案(将 AWS OpsWorks 与 Chef 12 结合使用)不需要使用自定义说明书显式存储和分发社区说明书?
我很确定这就是您现在应该做的。由于我一直不明白的原因,他们删除了 Chef 11 和 Chef 12 堆栈之间的一堆自动化 berks 集成。
我有同样的问题。看起来它应该将 berk pack
与 s3 存储一起使用,但(对我而言)它增加了另一个级别的复杂性(并且仅对 CI 工具有用,其中由 berkshelf 创建的食谱存档会方便'artifact'):
In Chef 12 Linux, Berkshelf is no longer installed on stack instances. Instead, we recommend that you use Berkshelf on a local development machine to package your cookbook dependencies locally. Then upload your package, with the dependencies included, to Amazon Simple Storage Service. Finally, modify your Chef 12 Linux stack to use the uploaded package as a cookbook source. For more information, see Packaging Cookbook Dependencies Locally.
来自 here.
以上问题的答案在此。
检查你的 metadatatab.rb 文件并检查你的 chef 版本,我的情况应该是 12.0 或更高版本。
在执行您的 customcookbooks 之前,更新它并 运行 执行。
一旦你 运行 updatecookbook 检查 /var/chef/cookbook 文件夹并检查你的文件是否存在。
然后 运行 executecookbook。
享受。
问题
当 AWS OpsWorks 上的 运行 自定义说明书出现 setup_failed
状态时,实例和失败日志中显示以下内容:
[2016-03-26T22:53:48+00:00] INFO: Started chef-zero at chefzero://localhost:8889 with repository at /var/chef
One version per cookbook
data_bags at /var/chef/runs/62832572-cb67-421a-8309-d831140d7b98/data_bags
nodes at /var/chef/runs/62832572-cb67-421a-8309-d831140d7b98/nodes
[2016-03-26T22:53:48+00:00] INFO: Forking chef instance to converge...
[2016-03-26T22:53:48+00:00] INFO: *** Chef 12.7.2 ***
[2016-03-26T22:53:48+00:00] INFO: Chef-client pid: 17842
[2016-03-26T22:53:49+00:00] INFO: HTTP Request Returned 404 Not Found: Object not found: chefzero://localhost:8889/nodes/test1.localdomain
[2016-03-26T22:53:49+00:00] INFO: Setting the run_list to ["recipe[my_cookbook::default]"] from CLI options
[2016-03-26T22:53:49+00:00] INFO: Run List is [recipe[my_cookbook::default]]
[2016-03-26T22:53:49+00:00] INFO: Run List expands to [my_cookbook::default]
[2016-03-26T22:53:49+00:00] INFO: Starting Chef Run for test1.localdomain
[2016-03-26T22:53:49+00:00] INFO: Running start handlers
[2016-03-26T22:53:49+00:00] INFO: Start handlers complete.
[2016-03-26T22:53:49+00:00] INFO: HTTP Request Returned 404 Not Found: Object not found:
[2016-03-26T22:53:49+00:00] INFO: HTTP Request Returned 412 Precondition Failed: No such cookbook: apt
================================================================================
Error Resolving Cookbooks for Run List:
================================================================================
Missing Cookbooks:
------------------
No such cookbook: apt
Expanded Run List:
------------------
* my_cookbook::default
OpsWorks 堆栈已配置
- 厨师 12
- 使用自定义 Chef 食谱
- 为自定义说明书使用 Git 存储库
自定义食谱回购
为了找到问题的原因,创建了一个食谱,其中包含一个运行 apt-get update
的食谱(在 kitchen converge
下按预期运行)。这些文件是使用 chef generate cookbook my_cookbook
:
.
└── my_cookbook
├── Berksfile
├── chefignore
├── metadata.rb
├── README.md
├── recipes
│ └── default.rb
├── spec
│ ├── spec_helper.rb
│ └── unit
│ └── recipes
│ └── default_spec.rb
└── test
└── integration
├── default
│ └── serverspec
│ └── default_spec.rb
└── helpers
└── serverspec
└── spec_helper.rb
唯一改变的文件是:
my_cookbook/Berksfile
source 'https://supermarket.chef.io'
metadata
cookbook 'apt'
my_cookbook/metadata.rb
...
depends 'apt', '~> 3.0.0'
my_cookbook/recipes/default.rb
include_recipe 'apt::default'
此外,Berksfile 已添加到存储库的根目录中
source 'https://supermarket.chef.io'
cookbook 'apt'
当前的解决方法
当前的解决方法包括使用 berks vendor
下载依赖项,然后将下载的说明书复制到存储库的根目录中,即:
.
├── Berksfile
├── apt
└── my_cookbook
是否有更好的解决方案(将 AWS OpsWorks 与 Chef 12 结合使用)不需要使用自定义说明书显式存储和分发社区说明书?
我很确定这就是您现在应该做的。由于我一直不明白的原因,他们删除了 Chef 11 和 Chef 12 堆栈之间的一堆自动化 berks 集成。
我有同样的问题。看起来它应该将 berk pack
与 s3 存储一起使用,但(对我而言)它增加了另一个级别的复杂性(并且仅对 CI 工具有用,其中由 berkshelf 创建的食谱存档会方便'artifact'):
In Chef 12 Linux, Berkshelf is no longer installed on stack instances. Instead, we recommend that you use Berkshelf on a local development machine to package your cookbook dependencies locally. Then upload your package, with the dependencies included, to Amazon Simple Storage Service. Finally, modify your Chef 12 Linux stack to use the uploaded package as a cookbook source. For more information, see Packaging Cookbook Dependencies Locally.
来自 here.
以上问题的答案在此。
检查你的 metadatatab.rb 文件并检查你的 chef 版本,我的情况应该是 12.0 或更高版本。
在执行您的 customcookbooks 之前,更新它并 运行 执行。
一旦你 运行 updatecookbook 检查 /var/chef/cookbook 文件夹并检查你的文件是否存在。
然后 运行 executecookbook。
享受。