vsa home vsa about us vsa consulting vsa training vsa endorsements vsa blog vsa contact

CFEngine Training

Automating System Administration: CFEngine 3 Fundamentals

Aleksey Tsalolikhin, Vertical Sys Admin Inc

Who should attend this course:

Anyone with at least a basic knowledge of system administration interested in increasing operational efficiency and sys admin happiness.

Why you need to know about Automated System Administration?

Automation of system administration is the key to scalability. It helps not only in change management but also in knowledge management (documenting the intended state of your system and the reasons why it is configured that way). Automating your system administration is key to career progression from system administration to more interesting system engineering work.

Why CFEngine 3?

CFEngine is the granddaddy of policy-based configuration management systems, and Cfengine version 3 increases the power and flexibility of managing network-attached computers. Cfengine can operate in the widest variety of environments, from embedded sensors to supercomputers, from underwater to outer space. It can run on the widest range of operating systems and has the smallest resource footprint. Cfengine is a very powerful tool.

What you will take back to work:

A thorough grounding in automating system administration using CFEngine 3 and the ability to implement configuration policies on your systems. You will be able to automatedly handle and control files, processes, packages, and commands, all resulting in Correct and Known Configuration on your servers.

What this course covers:

  1. The History, Design Principles, and Philosophy of CFEngine:
    • CFEngine 1: A configuration management language to handle different Unix systems
    • CFEngine 2: Computer immunology and convergence to desired state
    • CFEngine 3: The promise model
    • Knowledge management is the key to scalability
    • The importance of abstraction in knowledge management
  2. The Basic Grammar of CFEngine 3:
    • Promises of desired system state
    • Promise atributes
    • Collections of promises
    • Collections of promise attributes
  3. The CFEngine 3 Data Types and How to Use Them:
    • Scalar variables: Strings, integers, and real numbers
    • Lists of Scalars
  4. How to use Patterns in Promises to Describe Configuration Efficiently:
    • Classifying servers to control when and where configuration promises apply using CFEngine "classes"
    • Leveraging the power of regular expressions
    • Using lists to drive action: add or remove users, install or delete packages, and so on.
    • Re-using code by abstracting promise attributes into parameterizable promise bodies
    • Re-using code by abstracting promise bundles into parameterizable methods
  5. Advanced CFEngine Topics
    • Selecting files using simple and compound filters
    • Selecting processes using simple and compound filters
    • Configuring a CFEngine client-server ecosystem
    • Generating reports; how CFEngine can help you audit and report compliance.
  6. Many Practical Examples and Exercises to Seed Your Policy Set.

This class includes exercises that will be performed using a provided VM.

The course balances theory and practical. See the complete course plan.

About the Instructor

Aleksey Tsalolikhin has been administering UNIX systems for over 12 years. At EarthLink, which grew to over 5,000,000 users, Aleksey, wrangling hundreds of servers by hand, developed an abiding interest in automating configuration management. Aleksey has been using CFEngine for 5 years. Aleksey is a member of LOPSA, USENIX, ACM and IEEE Computer Society. He's a full-time system administrator. Aleksey writes and teaches about distributed system configuration management tools in general and Cfengine in particular. Aleksey is a recognized Cfengine Community Contributor. Aleksey was trained by Mark Burgess, the author of Cfengine.

Student Feedback.

I have a better idea of what the "bundle" and "body" stanza syntax means.

--Richard Siddal

I had been hitting a real roadblock with understanding the relationships between promises, bundles and bodies. I don't know if it was from tunnel vision from CF2 or just general thick headedness, but for some reason things just weren't clicking. For whatever reason, the mysterious glue that was keeping me from "getting it" showed up during the webinar. So for me, it was a huge benefit.

--Sean Johnson

[The webinar] was very useful. There are one or two CFEngine features that I've been using for a while but I've used them mechanically - just imitation - but I didn't understand how/why they worked. This webinar helped me to understand now why they work. Also, when I first implemented CF2, I only had the CF2 documentation and a USENIX paper. It was a very difficult process understanding and getting the environment set up. With this webinar, my CF3 upgrade and implementation should be far simpler. One of the best things about the webinar was that there was plenty of time to go through the questions in detail.

--Abid Khwaja

The questions I had that I cannot get from the website nor forums have been answered. Moreover, having a expert teaching the product also helps a lot.

--Jerome Yanga, Systems Administrator at ESRI

The examples presented were easy to follow and provided me the chance to ask questions. You were very thorough about your explanation of various aspects of the CFEngine software and were always willing to go over things more as people had questions that they needed to ask.


Hands on was good, I also really liked being able to ask questions about things have no documentation, or recommended ways of doing complex configuration.


[CFEngine] seems to be a simple to complex package that is very manageable. ... The examples, hands on training helped me a lot. I am a hands on person and this helped me a lot. ... You provided a lot of examples and good explanations of what they do. Thanks for all of it. ... Overall I have been pleased with the information you have put into 2 1/2 days. I have really been impressed. Thanks for doing a great job.


Training has helped me improve my troubleshooting skills of CFEngine3. I have understood some of the design goals and now clearly understand the syntax of CFEngine promises. ... Very personal approach to teaching. We are bored to death with power point slides. Most of the class was hands on.


It was more in-depth and intensive than most of the vendor training things I've gone to, not a lot of starting late, leaving early, etc. Good attention to detail and making sure all points were understood.


Website design by Mindscape Media