I would consider the following a small list of pros and cons for the three
tools:

Pros:
Cfengine: Not written in Ruby, so currently is more efficient with system
resources.
Puppet: IMHO has the most approachable syntax of the three (for sysadmins),
and the strongest community. It also has the widest platform support, with
a lot of preexisting code and code examples out there.
Chef: Configs are written in Ruby, and somewhat modeled on Rails
development patterns, so it is relatively easy for Ruby/Rails devs to pick
up. Also, Chef was designed from the ground up for the cloud, so is focused
on things like dynamically spinning up cloud instances. (Check out knife
and databags) If you don't want to manage your own Chef server you can get
it as a preconfigured service.

Cons:
Cfengine: Can be a bit challenging to learn, especially the promise theory.
Puppet: Particularly with older versions of Ruby can have memory usage
issues. Variable scoping is not ideal. These issues are manageable though.
Chef: No true dependency graphing, (implicit execution order) Setting up a
chef server is a bit on the challenging side, since it has a number of
requirements that don't fall into very common use. (Erlang based CouchDB,
and Solr). Learning Ruby is mandatory.

None of these tools are perfect and each have their warts, but any one of
them would make your life a lot easier. I'd say though that I prefer Puppet
over cfengine in almost all cases (except maybe a case where I am managing
only machines that have very tight resource constraints). Chef vs Puppet it
depends. If I was working entirely in the cloud and I had a very dynamic
environment, or was a Ruby shop, Chef would probably be my choice. In
almost all other cases I would go with Puppet. That said, the Puppet
community is working to address the Cloud deployment differences, so if the
cloud is in the future but not a now thing, I wouldn't let that effect your
decision. (And puppet does work in the cloud today, just the support is
relatively new and not yet as robust as Chef's)

All in all, for the reason of community and ecosystem alone, I'd say go
with Puppet.

Here are some random syntax examples:
cfengine:
http://www.sysadmin.hep.ac.uk/wiki/Cfengine:_Installing_Xrootd_with_cfengine
puppet: http://people.redhat.com/dlutter/puppet-app.html
chef:
https://github.com/opscode/cookbooks/blob/master/apache2/recipes/default.rb

Cheers,
Brian

P.S. - Another tool to look at, that I have *heard* good things about is
bcfg2, but it isn't nearly as popular as the others.

-- 
<http://aws.amazon.com/solutions/solution-providers/brandorr/>

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To post to this group, send email to puppet-users@googlegroups.com.
To unsubscribe from this group, send email to 
puppet-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/puppet-users?hl=en.

Reply via email to