Tengo un proyecto existente chef-solo
al cual estoy tratando de agregar el soporte vagrant
. Normalmente uso un cuchillo para cocinar estas recetas en servidores EC2 usando Ubuntu 10.04 AMIs publicado por Canonical.Vagrant requiere atributos en roles.json que rompen el proyecto Chef existente
Vagrant requiere que agrego chef_type
y json_class
atributos a mis roles/*.json
archivos de trabajo, como este:
{
"name": "memcached",
"chef_type": "role",
"json_class": "Chef::Role",
"run_list": ["base", "memcached"]
}
Si No añadir estos en el fichero de definición de funciones, entonces me sale este error siguiente . Presumiblemente, estos atributos le dicen al 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 trato de cocinar el mismo papel en EC2 la existencia de chef_type
y json_class
atributos romper el proceso, produciendo el siguiente error. Presumiblemente, esto es debido a que en este caso chef quiere tratar mi definición de funciones como un hash de Rubí (y llamar .delete
de ella)
/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 cocina EC2 volver a trabajar de forma normal, pero luego Vagrant está roto.
La principal diferencia que veo entre mi comando de 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á incluido en el archivo dna.json
.
Mina:
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 de que puedo configurar mi Vagrantfile para hacer estos trabajos?