Open main menu

Changes

link to project on GitHub
From the Jinja2 documentation, there are two options to control whitespace in Jinja templates:
 * <code>trim_blocks</code>* <code>lstrip_blocks</code>
But actually, there's more to it. [https://jinja.palletsprojects.com/en/3.1.x/templates/ The "Template Designer Documentation"] specifically for [https://jinja.palletsprojects.com/en/3.1.x/templates/#whitespace-control whitespace control] is inadequate. That's why I wrote this article.
== Jinja in Ansible ==
In [[Ansible]]'s Template module, you can see in the source code
 * [https://github.com/search?q=repo%3Aansible%2Fansible%20trim_blocks&type=code trim_blocks defaults to true]* [https://github.com/search?q=repo%3Aansible%2Fansible%20lstrip_blocks&type=code lstrip_blocks defaults to false]
But what does this mean? What do these options do? And how do I use them in my Ansible templates?
== In the task ==
In at least v2.9 of Ansible, the Template module has options to specify both.
* [https://docs.ansible.com/ansible/2.9/modules/template_module.html 2.9 docs for the template module] []
* [https://docs.ansible.com/ansible/latest/modules/template_module.html latest docs for the template module]
** [https://docs.ansible.com/ansible/latest/collections/ansible/builtin/template_module.html#parameter-lstrip_blocks parameter lstrip_blocks]
** [https://docs.ansible.com/ansible/latest/collections/ansible/builtin/template_module.html#parameter-trim_blocks parameter trim_blocks]
*[https://docs.ansible.com/ansible/2.9/modules/template_module.html 2.9 docs for the template module]*[https://docs.ansible.com/ansible/latest/modules/template_module.html latest docs for the template module]**[https://docs.ansible.com/ansible/latest/collections/ansible/builtin/template_module.html#parameter-lstrip_blocks parameter lstrip_blocks]**[https://docs.ansible.com/ansible/latest/collections/ansible/builtin/template_module.html#parameter-trim_blocks parameter trim_blocks] == In the template file ==
As the '''very first line''' of your template file, you can use a magic comment directive to control the behavior of the Ansible Template module
<code>#jinja2: trim_blocks: "true", lstrip_blocks: "true"</code><ref>It's unclear whether the boolean value(s) to be quoted. I believe it was a bug that is now fixed - meaning they can be bare.</ref>
== By hand ==
I was so frustrated by the lack of clear examples '''that showed all variants''', I created a project on GitHub called '''[https://github.com/freephile/test-jinja test-jinja]''' that does exactly that. (Inspiration from https://github.com/ansible/ansible/pull/37478)
 
You could also use the [https://github.com/qn7o/jinja2-live-parser jinja2 live parser] project to interactively preview jinja.
If you're confused about Variable notation and how those are defined in templates, see https://jinja.palletsprojects.com/en/3.1.x/templates/#variables
== Debugging ==Just put <code>{% debug %}</code> somewhere in your template file.This didn't work for me in Ansible 2.9 
== More ==Bloomreach Engagement is a commercial Web product that uses Jinja for templating. So they have a pretty good [https://documentation.bloomreach.com/engagement/docs/jinja-syntax reference guide].{{References}}
[[Category:Ansible]]
[[Category:Templating]]
[[Category:Python]]