More details:
https://commons.lbl.gov/display/~jwe...gine+vs+Puppet

A forwarded version:

There are lots of links online, CFEngine seems to be very powerful and well thought out, it is the grandfather of configuration management. What convinced me to go Puppet:

Sysadmin Models - O'Reilly Sysadmin

For instance, take one of the big differences between cfengine and Puppet; cfengine focuses mostly on managing textfiles, while Puppet manages semantically more powerful constructs like users, services, and packages. Thus, Puppet has higher-level models than cfengine, and if you accept my premise that model power derives from how high-level it is, that generally makes Puppet a more powerful tool than cfengine.

and

What really sets Puppet apart from Cfengine isn’t that it models higher-level resources instead of files, it’s that it allows you to model the relationships between those resources. Puppet’s lowest layer is responsible for the resource modeling (e.g., what it means to be a User on Solaris vs. OS X), but its language handles the high-level relationships between those resources, including how they’re grouped (e.g., they’re all part of the class of resources that makes apache work) and how they relate (e.g., apache should restart if its configuration file changes, and changes to the file should happen before the service is checked).

Puppet seems to handle more complex tasks, at the possible expense of more complex configuration, at least initially, but it can then handle "higher-level" funtions, like package management. This will be important to us if we are doing cross-platform (Linux as well as FreeBSD) management.

Interesting articles from people who have migrated from CFEngine to Puppet:

Re: cfengine vs. puppet

I view cfengine more as a framework to manage and deploy your own scripts. Cfengine will never allow you say "install the Office package" but will help you deploy a shell script you've written that installs the office package on all of your machines.
I'd say both tools are comparable when distributing flat text configuration files, but once you start doing more high level things like package deployment or if you need a strict order of operations, e.g. Make sure Radmind is installed, then run ktcheck, then run fsdiff, then run lapply, then you should probably focus on Puppet.

Also good transition links:

* divisionbyzero : From cfEngine to Puppet: A retrospective
* Puppet - Transitioning From Cfengine - ReductiveLabs.com