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)";
}
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. 

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.