Error de receta del chef: error al resolver los libros de cocina para la list de ejecución

He instalado los siguientes libros de cocina con 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; 

Y ahora, cuando ejecuto sudo chef-client --local-mode --runlist 'recipe[riak]' me sale un error quejándose de la dependencia de git. Sin embargo, el libro de cocina riak contiene "git": "~> 3.0", ,.

El libro de cocina git que está instalado es esta versión:

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

Aquí está el error real para el command:

 $ 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) root@test:~/chef/cookbooks/test# 

Por último, aquí está la stacktrace si eso es realmente útil para alguien:

 $ 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 (requinetworking)>' /usr/bin/chef-client:33:in `load' /usr/bin/chef-client:33:in `<main> 

Cualquier ayuda es muy apreciada.

La restricción "git": "~> 3.0" significa que quiere una versión> = 3.0 y less de 4.0.

Eso no está satisfecho con "4.0.2".

Referencia:

knife cookbook site install realidad no asimila las versiones de las dependencies. Es una herramienta anterior que es anterior a la forma en que los libros de cocina modernos hacen dependencies. Te recomiendo que uses Berkshelf para administrar tus dependencies, maneja este tipo de cosas correctamente.

Para explicar el problema con más detalle, la restricción ~> 3.0 significa cualquier cosa, desde 3.0 hasta, pero sin include, 4.0. knife cookbook site install acaba de agarrar la última versión del libro de cocina de git que es 4.0.2, y por lo tanto fuera del range permitido.

Cuando creas un libro de cocina crea una carpeta llamada nodes . En esta carpeta hay un file json con los nombres del libro de cocina. Elimina esta carpeta e intenta nuevamente. Funcionó para mí