chef vagrant

Vagrant requiere atributos en roles.json que rompan el proyecto Chef existente



(2)

Esto debería ser arreglado en la última versión de Chef. Hubo una vulnerabilidad de JSON que permitió la deserialización de objetos infinitos. Creo que los problemas de solución para eso también solucionarán el problema que está viendo aquí también.

Prueba Chef 11 y Vagrant 1.5.6

Tengo un proyecto chef-solo existente en el que estoy tratando de agregar soporte vagrant . Normalmente uso cuchillo para cocinar estas recetas en servidores EC2 usando Ubuntu 10.04 AMI publicadas por Canonical.

Vagrant requiere que añada los chef_type y json_class a mis roles/*.json trabajo roles/*.json archivos, como este:

{ "name": "memcached", "chef_type": "role", "json_class": "Chef::Role", "run_list": ["base", "memcached"] }

Si no los agrego al archivo de definición de rol, obtengo el siguiente error. Presumiblemente, estos atributos le dicen a chef que trate mi archivo JSON como una instancia de la clase Chef :: Role.

[default] [Thu, 26 May 2011 02:19:44 +0200] DEBUG: NoMethodError: undefined method `run_list_for'' for {"name"=>"memcached", "run_list"=>["wantsa", "memcached"]}:Hash /opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/../lib/chef/run_list/run_list_expansion.rb:139:in `expand_run_list_items'' /opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/../lib/chef/run_list/run_list_expansion.rb:78:in `expand'' /opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/../lib/chef/run_list.rb:138:in `expand'' /opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/../lib/chef/node.rb:437:in `expand!'' /opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/../lib/chef/client.rb:249:in `build_node'' /opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/../lib/chef/client.rb:151:in `run'' /opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/../lib/chef/application/solo.rb:192:in `run_application'' /opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/../lib/chef/application/solo.rb:183:in `loop'' /opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/../lib/chef/application/solo.rb:183:in `run_application'' /opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/../lib/chef/application.rb:66:in `run'' /opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/chef-solo:25 /opt/ruby/bin/chef-solo:19:in `load'' /opt/ruby/bin/chef-solo:19

Sin embargo, cuando intento cocinar el mismo rol en EC2, la existencia de los chef_type y json_class interrumpe el proceso, lo que produce el siguiente error. Es de suponer que esto se debe a que, en este caso, el chef quiere tratar la definición de mi rol como un hash de Ruby (y llamar a .delete )

/usr/lib/ruby/gems/1.8/gems/chef-0.9.16/bin/../lib/chef/node.rb:379:in `consume_run_list'': undefined method `delete'' for #<Chef::Role:0x7fa337535138> (NoMethodError) from /usr/lib/ruby/gems/1.8/gems/chef-0.9.16/bin/../lib/chef/node.rb:370:in `consume_attributes'' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.16/bin/../lib/chef/node.rb:358:in `consume_external_attrs'' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.16/bin/../lib/chef/client.rb:222:in `build_node'' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.16/bin/../lib/chef/client.rb:145:in `run'' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.16/bin/../lib/chef/application/solo.rb:190:in `run_application'' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.16/bin/../lib/chef/application/solo.rb:181:in `loop'' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.16/bin/../lib/chef/application/solo.rb:181:in `run_application'' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.16/bin/../lib/chef/application.rb:62:in `run'' from /usr/lib/ruby/gems/1.8/gems/chef-0.9.16/bin/chef-solo:25 from /usr/bin/chef-solo:19:in `load'' from /usr/bin/chef-solo:19 rake aborted!

Cuando quito el chef_type y json_class mis guiones de cocción EC2 vuelven a funcionar normalmente, pero Vagrant se rompe.

La principal diferencia que veo entre mi comando chef-solo y el utilizado por Vagrant es que mi comando chef-solo tiene una relación directa con mi archivo roles.json, mientras que Vagrant está envuelto en el archivo dna.json .

Mía:

ssh [email protected] "cd /etc/chef; sudo env chef_environment=production chef-solo -l info -c config/solo.rb -j roles/memcached.json "

Vagabundos

cd /tmp/vagrant-chef chef-solo -c solo.rb -j dna.json

¿Hay alguna manera en que pueda configurar mi Vagrantfile para que funcione?


Si bien no me he encontrado con este problema en particular, he notado que Chef, como objetivo móvil, tiende a suceder cosas extrañas como esta si estás usando las mismas recetas en diferentes versiones de Chef.

Solo para eliminar eso, lo primero que intentaría es hacer que las versiones de mi chef sean consistentes. Veo que su Vagrant VM está usando la versión 0.10.0 y su EC2 VM está usando 0.9.16, lo que sea más importante, tal vez podría estandarizarlo, por ejemplo, si está intentando replicar su sistema EC2 localmente, puede vuelva a crear su caja base de Vagrant (o piense en hacer la suya propia, la documentación es bastante buena en el sitio web de Vagrant) de modo que coincida más con lo que tiene instalado en EC2.