Prototype: string_mustache(template_string, optional_data_container)

Return type: string

Description: Formats a Mustache string template into a string, using either the system datastate() or an explicitly provided data container.

The usual Mustache facilities like conditional evaluation and loops are available, see the example below.

Example:

body common control
{
      bundlesequence => { "config", "example" };
}

bundle agent config
{
  vars:
      "deserts" data => parsejson('{ "deserts": {
  "Africa": "Sahara",
  "Asia": "Gobi"
} }');
}


bundle agent example
{
  vars:
      # {{@}} is the current key during an iteration in 3.7 with Mustache
      "with_data_container" string => string_mustache("from container: deserts = {{%deserts}}
from container: {{#deserts}}The desert {{.}} is in {{@}}. {{/deserts}}", "config.deserts");

      # you can dump an entire data structure with {{%myvar}} in 3.7 with Mustache
      "with_system_state" string => string_mustache("from datastate(): deserts = {{%vars.config.deserts.deserts}}
from datastate(): {{#vars.config.deserts.deserts}}The desert {{.}} is in {{@}}. {{/vars.config.deserts.deserts}}"); # will use datastate()

  reports:
      "With an explicit data container: $(with_data_container)";

      "With the system datastate(): $(with_system_state)";
}

Output:

R: With an explicit data container: from container: deserts = {
  "Africa": "Sahara",
  "Asia": "Gobi"
}
from container: The desert Sahara is in Africa. The desert Gobi is in Asia. 
R: With the system datastate(): from datastate(): deserts = {
  "Africa": "Sahara",
  "Asia": "Gobi"
}
from datastate(): The desert Sahara is in Africa. The desert Gobi is in Asia. 

History: Introduced in CFEngine 3.7

See also: datastate(), readjson(), parsejson(), data.