Vagrant requiere atributos en roles.json que rompan el proyecto Chef existente
Tengo una @ existenchef-solo
proyecto al que estoy tratando de agregarvagrant
soporte. Por lo general, uso cuchillo para cocinar estas recetas en servidores EC2 usando Ubuntu 10.04 AMI publicadas por Canonical.
Vagrant requiere que agreguechef_type
yjson_class
atributos para mi trabajoroles/*.json
archivos, así:
{
"name": "memcached",
"chef_type": "role",
"json_class": "Chef::Role",
"run_list": ["base", "memcached"]
}
Si yo no agregue estos al archivo de definición de roles, luego aparece el siguiente error. 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 dechef_type
yjson_class
atributos interrumpen el proceso, produciendo el siguiente error. Presumiblemente esto se debe a que en este caso el chef quiere tratar mi definición de rol como un hash Ruby (y llamar a.delete
de eso
/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 elimino lachef_type
yjson_class
mis scripts de cocina EC2 vuelven a funcionar normalmente, pero luego 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 eldna.json
archivo
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 "
Vagrants:
cd /tmp/vagrant-chef
chef-solo -c solo.rb -j dna.json
¿Hay alguna forma de configurar mi Vagrantfile para que funcione?