在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
为了找到问题的原因,使用运行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明确存储和分发社区烹饪书?
答案 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。
享受。