Chef

無法在本地模式下解決廚師外部食譜依賴性

  • April 26, 2018

我正在做我的第一個廚師食譜。我用一個食譜(default.rb)創建了一本我稱之為常見的食譜:

apt_repository "mariadb-repo" do
 uri "http://tedeco.fi.upm.es/mirror/mariadb/repo/10.1/ubuntu"
 distribution "trusty"
 components ["main"]
 arch "amd64"
 keyserver "keyserver.ubuntu.com"
 key "CBCB082A"
end

我在 metadata.rb 的末尾添加了“depends ‘apt’”。如果我執行:

Starting Chef Client, version 12.5.1
resolving cookbooks for run list: ["common"]

================================================================================
Error Resolving Cookbooks for Run List:
================================================================================

Missing Cookbooks:
------------------
No such cookbook: apt

Expanded Run List:
------------------
* common


Running handlers:
[2016-01-28T13:07:17+00:00] ERROR: Running exception handlers
Running handlers complete
[2016-01-28T13:07:17+00:00] ERROR: Exception handlers complete
Chef Client failed. 0 resources updated in 01 seconds
[2016-01-28T13:07:17+00:00] FATAL: Stacktrace dumped to /home/vagrant/.chef/local-mode-cache/cache/chef-stacktrace.out
[2016-01-28T13:07:17+00:00] ERROR: 412 "Precondition Failed"
[2016-01-28T13:07:17+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)

好的,所以我添加到我的 Berksfile 中:

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

cookbook 'apt'

metadata

然後嘗試將 apt cookbook 安裝到幾個位置:

$ berks install # installs to ~/.berkshelf/cookbooks/
$ berks vendor --except=common berks-cookbooks/

我注意到的第一件事是第二個命令將食譜、apt 和我的 common 打包到我指定的目錄(甚至傳遞 –except=common)。沒關係:如果我現在嘗試執行:

$ sudo chef-client --local-mode --runlist 'recipe[common]'

從我的食譜(我稱之為common)目錄和berks-cookbooks 目錄中。兩者都不起作用,上面的錯誤仍然存在。我還嘗試在我的食譜目錄中使用以下 client.rb:

cookbook_path = "./berks-cookbooks"
chef_repo_path = "#{cookbook_path}"

以及這些的一些變體……

我錯過了什麼?在本地模式下,如何讓 chef-client 正確滿足這些依賴關係?

滿足這種依賴關係的方法是什麼?

‘‘‘EDIT 1’’’:不使用 sudo 執行不起作用。

本地模式下的 Chef 客戶端讀取knife.rb為其配置文件,而不是client.rb. 當在工作站上使用它時,這是有道理的,比如廚師供應,但當您嘗試在生產中使用本地模式時,可能會非常出乎意料。

通常,您應該使用本地模式berks vendor來處理導出。不要chef-client從食譜文件夾中執行,而是製作一個/root/local_mode_repo或類似的,然後執行berks vendor /root/local_mode_repo/cookbooks. 然後您可以chef-client --local-mode在該文件夾中執行。roles/儲存庫中的特定文件夾名稱cookbooks/通常是不可配置的。

引用自:https://serverfault.com/questions/752411