簡體   English   中英

無法在 AWS Opsworks 上使用 Chef 12 找到 Chef 社區食譜

[英]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
  • 使用自定義廚師食譜
  • 將 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)不需要顯式存儲和分發帶有自定義說明書的社區說明書?

我有同樣的問題。 看起來它應該使用帶有 s3 存儲的berk pack ,但是(對我而言)它增加了另一個級別的復雜性(並且僅對 CI 工具有用,其中由 berkshelf 創建的食譜存檔將是方便的“神器”):

在 Chef 12 Linux 中,Berkshelf 不再安裝在堆棧實例上。 相反,我們建議您在本地開發機器上使用 Berkshelf 在本地打包您的說明書依賴項。 然后將包含依賴項的包上傳到 Amazon Simple Storage Service。 最后,修改您的 Chef 12 Linux 堆棧以使用上傳的包作為說明書源。 有關更多信息,請參閱在本地打包說明書依賴項。

這里開始

我很確定這就是你現在應該做的。 由於我從未理解的原因,他們刪除了 Chef 11 和 Chef 12 堆棧之間的一堆自動 Berks 集成。

這是上述問題的答案。

檢查您的 metadatatab.rb 文件並檢查您的廚師版本,我的情況應該是 12.0 或更高版本。

在執行您的 customcookbooks 之前,更新它並運行執行。

一旦您運行 updatecookbook 檢查 /var/chef/cookbook 文件夾並檢查您的文件是否存在。

然后運行executecookbook。

享受。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM