CFEngine – What is it ?

CFEngine is a configuration management engine. I’m going to write a series of short posts as I’m going to use CFEngine in a current project. Let’s start with a short description of CFEngine purpose and main features.

Brief description

CFEngine’s purpose is to maintain configurations and system state on a machine. This is the reason why it is mainly used in cluster-like environments, when you want to minimize the time you spend walking from machine to machine to update config files as well as the overall time you spend checking that everything is fine.

But there is no reason to limit the usage of CFEngine to clusters. It can be useful for a single machine as well even if you will use few of the great features of the tool.


The main features of CFEngine are :

  1. The possibility to update local configurations automatically from a central point : typically, you will modify a set of configuration files on a file server for one or many machines, and you will let CFEngine apply them to the groups of machines where the change applies
  2. The automatic “health check” of the machine : You will provide rules to CFEngine describing the “normal state” of one or many machines as well as for each rule how to restore service if it fails. Based on this ruleset, CFEngine will detect faults and repair the system by itself. Common usage are restarting services in case of failure, of file integrity monitoring

CFEngine’s configuration is very flexible. The rulesets can easily be applied to explicit (i.e : manually created) machine groupe, or to implicit (i.e : determined at runtime, based on criteria such as OS, DNS domain, etc) ones.

As you might guess, CFEngine is an extremely powerful tool, which will help you to bring down the overall administration time of your machines.

CFEngine is widely ported on Unix-like OSes, and to a less extent to Windows.

Coming next

In the next post, I’ll tackle with the installation of CFEngine on Debian GNU/Linux.

4 thoughts on “CFEngine – What is it ?”

  1. You might also be interested in my product, Puppet (, which I created after using and developing on cfengine for a couple of years. Its language is far more consistent than Cfengine’s, it’s easily extendable, and it has a far more open development community, with 6 or so committers already.

Comments are closed.