What are the right questions to ask when deciding whether to use Chef or Puppet

chefconfiguration-managementpuppet

I am about to start a new project which will, in part, require deploying many identical nodes of approximately three different classes:

  • Data nodes, which will run sharded instances of MongoDB.
  • Application nodes, which will run instances of a Ruby on Rails application and an older ASP.NET MVC application.
  • Processing nodes, which will run jobs requested by the application nodes.

All the nodes will run on instances of Ubuntu 10.04, though they will have different packages installed.

I have some familiarity with Chef from previous projects, though I don't consider myself an expert. In an effort to do due diligence, I have been investigating alternative possibilities. We have a number of folks in-house who are long-time Puppet users, and they have encouraged me to take a look.

I am having trouble evaluating both choices, though. Chef and Puppet share many of the same domain terminology — packages, resources, attributes, and so on, and they have a common history that stems from taking different approaches to the same problem. So in some sense they are very similar. But much of the comparison information I've found, like this article, is a little outdated.

If you were starting this project today, what questions would you ask yourself to decide whether you should use Chef or Puppet for configuration management? (Note: I don't want answer to the question "Should I use Chef or Puppet?")

Best Answer

Both Puppet and Chef can do what you want just fine. Your best is going to be to start doing what you're trying to do and decide which tool you like the best. I think the big questions you have to have to ask is:

Do you want a DSL? - Chef recipes are written in ruby, puppet has a DSL. Whether a DSL is good or a bad choice is one of the biggest differences between chef and puppet. The link you posted to bitfield consulting's comparison has some good comments about this you should read if you haven't already. I also found this blog post useful, make sure you read the comments too.

Do you know ruby? - If you don't know ruby, getting started with chef can be harder or require a larger investment of time since you need to learn a new language. Puppet has its own language which is easy to get started with. Starting with puppet 2.6, manifests can be written in ruby too.

At the Open Source Bridge in 2009, they had a panel of the authors and representatives of chef, puppet, bcfg2, cfengine, and automateit which you can watch on bliptv which has 1.75 hours of discussion about configuration management utilities.

Opscode/Chef talks about the difference between it and puppet in their FAQ as well.

I think your not knowing the right questions to ask might stem from you not having too much experience working with either of them, once you start using them you'll start seeing the differences between them. I'd suggest coming with some real life problems you will solve with chef or puppet, then start trying to solve them and see what you like/dislike about them. With Opscode/Chef, they offer a hosted solution that you can set up 5 nodes for free to get started.

Related Topic