Chef
無法在本地模式下解決廚師外部食譜依賴性
我正在做我的第一個廚師食譜。我用一個食譜(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/
通常是不可配置的。