Debugging a chef cookbook in vagrant with shef
Sometimes Vagrant’s provisioning error messages can be a little cryptic.
When troubleshooting a failing chef-solo run, tweaking a run_list
or
debugging a new recipe, I’ve found it very handy to log into the partially
provisioned VM with vagrant ssh
and then run: Vagrant is a great tool for
developing and testing new chef cookbooks. After bringing up a new vm, and
editing a cookbook,vagrant provision
runs the chef-solo provisioner and tests
things out. However, when things fail, vagrant’s provisioning error messages
can be a little cryptic. Shef is a good tool for running cookbooks in
isolation, but it needs some help to find all the configuration and attributes
that vagrant provides. If my new_and_broken
cookbook is failing on a Ubuntu
12.04 VM, all I need to do is run:
$ shef -s -c /tmp/vagrant-chef-1/solo.rb -j /tmp/vagrant-chef-1/dna.json
(output snip)
chef > recipe
chef:recipe > include_recipe 'new_and_broken'
(huge output snip)
chef:recipe > run_chef
(where the error happens)
This loads shef in solo mode, with vagrant generated configuration and JSON
attributes files, enters into recipe mode, loads my new and broken cookbook and
runs it. The resulting error messages are usually more helpful than vagrant
provision
and I can get back to work.