20.26. kb-00025: How Can I render Double Curly Braces {{ and }} during Golang Template rendering?

20.26.1. Knowledge Base Article: kb-00025

20.26.2. Description

Often times, content based Golang templating is used to generate template files used by other systems on the target machine (eg Jinja, Ansible, etc.). Many of these templating systems also use double curly braces to signal to the templating engine to perform expansion and advanced rendering capabilities.

In these cases, the content author must arrange the DRP Golang based template to protect the double curly braces from being intepretted by dr-provision at render time, so they are served as in-tact double curly braces to the target Machine.

Note that this solution is NOT an exhaustive reference of how to do this, but does describe some possible techniques.

20.26.3. Solutions

Golang template complains if you are building a template that also uses double curly brances (e.g. {{ jinja 2 for ansible }}) and it can be difficult to properly escape these characters.

There are multiple solutions, please review to see which best fits your needs.

Solution 1: Escape In Place

You can also use a pair of single quotes (`) to escape the block in place to create an string that is not modifed by gotemplates inside a gotemplate brace pair.

Generallly, this approach is recommended because it is simple and easy to read.

For example:

"{{`{{ services['drpcli.service'].status }}`}}"

Solution 2: Substitution

Another workaround is to define variables for the double brace and then use the variable in the template.

This approach is needed to make more template substitions _inside_ the Ansible code block.

For example:

{{ $openblock := "\x7B\x7B" }}
{{ $closeblock := "\x7D\x7D" }}

- hosts: localhost
  vars:
    braceme: "{{ $openblock }}{{ .Param "variable" }}{{ $closeblock }}"

20.26.4. Additional Information

Additional resources and information related to this Knowledge Base article.

Example from codebase: https://gitlab.com/rackn/provision-content/blob/521f3ed31242762dba04699f51f764949ec10fb3/task-library/tasks/ansible-join-up.yaml#L60

20.26.4.1. See Also

20.26.4.2. Versions

all

20.26.4.3. Keywords

double curly braces, jinja2, ansible, rendering, template

20.26.4.4. Revision Information

KB Article     :  kb-00025
initial release:  Wed Jun 10 12:03:02 PDT 2020
updated release:  Wed Jun 10 12:03:02 PDT 2020