【发布时间】:2016-07-14 12:46:07
【问题描述】:
问题
在 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 被添加到 repo 的根目录
source 'https://supermarket.chef.io'
cookbook 'apt'
当前的解决方法
当前的解决方法是使用 berks vendor 下载依赖项,然后将下载的说明书复制到 repo 的根目录中,即:
.
├── Berksfile
├── apt
└── my_cookbook
是否有更好的解决方案(将 AWS OpsWorks 与 Chef 12 结合使用)不需要显式存储和分发包含自定义说明书的社区说明书?
【问题讨论】:
标签: git amazon-web-services chef-infra aws-opsworks