Introduction
Creating a comma-separated list is a common task in templating, but ensuring no trailing comma appears after the last element can be tricky. In Jinja2, the loop.last
property provides a simple and elegant solution. In this guide, we’ll explore how to use loop.last
in Jinja2 and how to apply it effectively in Ansible playbooks.
Jinja2 Template Example
To avoid a trailing comma, leverage the loop.last
property in your Jinja2 template:
{% for item in my_list %}
{{ item }}{% if not loop.last %},{% endif %}
{% endfor %}
Explanation:
loop.last
: A built-in Jinja2 variable that evaluates toTrue
if the current iteration is the last one.if not loop.last
: Ensures a comma is only added when the current item is not the last element.
Input Example:
my_list:
- apple
- banana
- cherry
Output:
apple, banana, cherry
Ansible Playbook Example
To achieve the same result in an Ansible playbook, use the template
module or inline Jinja2.
Playbook Example:
---
- name: Generate a comma-separated string
hosts: localhost
vars:
my_list:
- apple
- banana
- cherry
tasks:
- name: Create a string with commas
set_fact:
comma_separated: >-
{{ my_list | map('string') | join(', ') }}
- name: Debug the result
debug:
msg: "{{ comma_separated }}"
Explanation:
join(', ')
: Combines all elements in the list with a comma and a space.map('string')
: Ensures all elements are converted to strings before joining. This is especially useful when dealing with mixed data types.
Output:
ok: [localhost] => {
"msg": "apple, banana, cherry"
}
Practical Considerations
Why Use loop.last
?
Using loop.last
in Jinja2 is a direct and effective way to control list formatting, especially when generating human-readable strings or configuration files.
Ansible and Jinja2 Integration
Ansible leverages Jinja2 for templating, making it a versatile tool for creating dynamic configurations. The use of join
in combination with map
often simplifies tasks when handling larger or complex lists.
Conclusion
By mastering the loop.last
property and the join
filter, you can handle comma-separated lists seamlessly in both Jinja2 and Ansible. Whether you’re building templates or automating configurations, these techniques provide clarity and precision to your code.
Academy
Learn the best practices for Jinja2 and Ansible templating with practical, real-life examples in my book Ansible By Examples.
Donate
Your support helps keep this content free. Consider donating to the project: