2014-11-15 33 views
1

我已經通過knife安裝了以下食譜:廚師配方錯誤:錯誤解決食譜的運行列表

for cb in apt build-essential erlang java sysctl git ulimit yum yum-epel packagecloud riak curl ; do knife cookbook site install $cb; done; 

,現在當我運行sudo chef-client --local-mode --runlist 'recipe[riak]'我得到一個錯誤抱怨git的依賴。然而,riak食譜包含"git": "~> 3.0",

已安裝了git食譜是這樣的版本:

$ cat /root/chef-repo/cookbooks/git/metadata.rb | grep version 
version   '4.0.2' 

下面是該命令的實際錯誤:

$ sudo chef-client --local-mode --runlist 'recipe[riak]' 
Starting Chef Client, version 11.18.0.rc.1 
resolving cookbooks for run list: ["riak"] 

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

Missing Cookbooks: 
------------------ 
Could not satisfy version constraints for: git 

Expanded Run List: 
------------------ 
* riak 


Running handlers: 
[2014-11-15T01:48:55-05:00] ERROR: Running exception handlers 
Running handlers complete 
[2014-11-15T01:48:55-05:00] ERROR: Exception handlers complete 
[2014-11-15T01:48:55-05:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out 
Chef Client failed. 0 resources updated in 3.588961624 seconds 
[2014-11-15T01:48:55-05:00] ERROR: 412 "Precondition Failed " 
[2014-11-15T01:48:55-05:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1) 
[email protected]:~/chef/cookbooks/test# 

最後這裏是堆棧跟蹤,如果這是真正有用的人:

$ cat /var/chef/cache/chef-stacktrace.out 
Generated at 2014-11-15 01:48:55 -0500 
Net::HTTPServerException: 412 "Precondition Failed " 
/opt/chefdk/embedded/lib/ruby/2.1.0/net/http/response.rb:119:in `error!' 
/opt/chefdk/embedded/apps/chef/lib/chef/http.rb:145:in `request' 
/opt/chefdk/embedded/apps/chef/lib/chef/http.rb:126:in `post' 
/opt/chefdk/embedded/apps/chef/lib/chef/policy_builder/expand_node_object.rb:168:in `sync_cookbooks' 
/opt/chefdk/embedded/apps/chef/lib/chef/policy_builder/expand_node_object.rb:66:in `setup_run_context' 
/opt/chefdk/embedded/apps/chef/lib/chef/client.rb:265:in `setup_run_context' 
/opt/chefdk/embedded/apps/chef/lib/chef/client.rb:429:in `do_run' 
/opt/chefdk/embedded/apps/chef/lib/chef/client.rb:213:in `block in run' 
/opt/chefdk/embedded/apps/chef/lib/chef/client.rb:207:in `fork' 
/opt/chefdk/embedded/apps/chef/lib/chef/client.rb:207:in `run' 
/opt/chefdk/embedded/apps/chef/lib/chef/application.rb:236:in `run_chef_client' 
/opt/chefdk/embedded/apps/chef/lib/chef/application/client.rb:338:in `block in run_application' 
/opt/chefdk/embedded/apps/chef/lib/chef/application/client.rb:327:in `loop' 
/opt/chefdk/embedded/apps/chef/lib/chef/application/client.rb:327:in `run_application' 
/opt/chefdk/embedded/apps/chef/lib/chef/application.rb:55:in `run' 
/opt/chefdk/embedded/apps/chef/bin/chef-client:26:in `<top (required)>' 
/usr/bin/chef-client:33:in `load' 
/usr/bin/chef-client:33:in `<main> 

任何幫助,非常感謝。

回答

1

約束"git": "~> 3.0"意味着它想要一個> = 3.0且小於4.0的版本。

這不滿足「4.0.2」。

參考:

+0

因此,我最終做的是:「berks install」,然後將它們移到「cookbook_path」中沒有版本號的目錄中。有沒有更直觀的方式,我錯過了這個?我現在不使用廚師獨奏,只是當地模式的廚師客戶。 – sinemetu1

+1

而不是手動移動的東西,使用'berks供應商'命令來完成這一點。 – coderanger

2

knife cookbook site install實際上並沒有幫助版本的依賴關係。這是一個較早的工具,它早於現代烹飪書的多種依賴關係。我建議你使用Berkshelf來管理你的依賴關係,它可以正確處理這種事情。

爲了更詳細地解釋該問題,~> 3.0約束意味着從3.0直到但不包括4.0的任何事物。 knife cookbook site install剛剛抓住了4.0.2的git cookbook的最新版本,因此超出了允許的範圍。

1

當你創建一個菜譜它創建了一個名爲nodes文件夾。在這個文件夾中有一個帶有食譜名稱的json文件。刪除此文件夾並重試。它爲我工作。