Mustache is a template system logic-less(no ifs, else’s or for loops) and can be used for HTML, config files, source code and so on.

CFEngine 3.6.x have support for Mustache, in this tutorial we will create a template and a CFEngine rule to parse the template and generate the file that we want.

Create the template file


My hostname is: {{hostname}}
My name is: {{name}}
Fruits that I like: {{fruits}}

Our CFEngine file


body common control
  bundlesequence => { "main", };

bundle agent main
      "any" usebundle => parse;

bundle agent parse
        edit_template => "/tmp/template.mustache",
        create => "true",
        template_method => "mustache",
        template_data => parsejson('{"hostname": "$(sys.uqhost)", "name": "Danilo", "fruits": "apple,banana,watermelon" }');

Lets run it and check the result

[root@myserver ~]# cf-agent -f 

[root@myserver ~]# cat /tmp/template.conf
My hostname is: myserver
My name is: Danilo
Fruits that I like: apple,banana,watermelon

It’s simple yet powerful. You can use it in many ways, I use for configuration files(httpd.conf, nginx.conf, etc.).