When I first set out to learn Chef I found that most of the blog posts, tutorials and even the Opscode Help pages themselves were a bit difficult to understand, to say the least. The ontology surrounding Chef is pretty hard to grasp for beginners: Resources, Clients, Nodes, knife, chef, Chef Server, Shef, Cookbooks, Recipes and so on. What I really needed when I started out was a specific walk-through of anything so long as it worked. And a lot of stuff doesn’t.
UPDATE: The promised first tutorial is over at Camel Punch
It’s very unfortunate that some of the cool, Opscode-recommended stuff doesn’t work so great just yet. For example,
knife ec2 server create almost always hangs right after the instance is started. Oh, and we have the perennial Ruby open source project problem: everything written about a hot new open source project must be treated with suspicion, because the APIs are in flux, and the information could be out of date.
I have run into the latter problem a lot. Chef 0.8 came with its own EC2 AMIs,
whereas the recommended approach for 0.9 is to go from a plain distro-supplied AMI, because knife can bootstrap a Chef client installation. UPDATE: Bryan Hale at Opscode informs me that this is no longer the case. Opscode provide AMIs for the US, but everyone else must roll their own. I did, so if you happen to need a 32-bit Ubuntu Lucid Chef 0.9.8 AMI for eu-west-1, you can use ami-0882a87c
Opscode are very responsive when approached by email, but I get a feeling their website support is dragging behind a little. For example, this complaint about the Knife docs hasn’t yet been addressed. I ran into the problem, too!
Another minor gripe I have is with the licensing: I need to sign an agreement before I can fix your documentation? Really?
With all this said, I’ve managed to get a pretty cool cookbook together that sets up CruiseControl.rb on a fresh Ubuntu server with Passenger running on Ruby Enterprise Edition. The cool part is that it uses Octopi to query a Github account and sticks all of a user’s pushable repos into CruiseControl. I promise the next post will be an easy-to-follow tutorial. Enough complaining!