未能在AWS Opsworks上使用Chef 12查找Chef Community Cookbook

时间:2016-03-27 00:07:38

标签: git amazon-web-services chef aws-opsworks

问题

在AWS OpsWorks上运行自定义cookbook时,会在实例中显示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堆栈

  • for Chef 12
  • 使用自定义Chef cookbook
  • 将Git存储库用于自定义cookbook

Custom Cookbook Repo

为了找到问题的原因,使用运行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 /食谱/ default.rb

include_recipe 'apt::default'

此外,Berksfile已添加到repo的根目录

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

当前的解决方法

当前的解决方法是使用berks vendor下载依赖项,然后将下载的cookbook复制到repo的根目录中,即:

.
├── Berksfile
├── apt
└── my_cookbook

是否有更好的解决方案(使用AWS OpsWorks与Chef 12),不需要使用自定义cookbook明确存储和分发社区烹饪书?

3 个答案:

答案 0 :(得分:2)

我有同样的问题。看起来它应该使用berk pack和s3存储,但是(对我而言)它增加了另一层次的复杂性(并且仅对CI工具有用,其中berkshelf创建的cookbook存档会很方便&# 39;工件&#39):

  

在Chef 12 Linux中,Berkshelf不再安装在堆栈实例上。相反,我们建议您在本地开发计算机上使用Berkshelf在本地打包您的cookbook依赖项。然后将包含依赖项的软件包上传到Amazon Simple Storage Service。最后,修改Chef 12 Linux堆栈以使用上载的包作为cookbook源。有关更多信息,请参阅本地包装Cookbook依赖项。

来自here

答案 1 :(得分:1)

我很确定这就是你现在应该怎么做的。他们删除了Chef 11和Chef 12堆栈之间的一系列自动化berks集成,原因是我从未理解过。

答案 2 :(得分:0)

这是上述问题的答案。

检查您的metatabtab.rb文件并检查您的Chef版本,我的情况应该是12.0或更高。

在执行自定义菜谱之前第二秒,对其进行更新并运行执行。

一旦运行updatecookbook,请检查/ var / chef / cookbook文件夹,并检查文件是否存在。

然后运行executecookbook。

享受。