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:

``jinja

{% for item in my_list %}

{{ item }}{% if not loop.last %},{% endif %}

{% endfor %}

`

Explanation:

1. loop.last: A built-in Jinja2 variable that evaluates to True if the current iteration is the last one.

2. if not loop.last: Ensures a comma is only added when the current item is not the last element.

Input Example:

`yaml

my_list:

- apple

- banana

- cherry

`

Output:

`text

apple, banana, cherry

`

---

Ansible Playbook Example

To achieve the same result in an Ansible playbook, use the template module or inline Jinja2.

Playbook Example:

`yaml

---

  • 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:

1. join(', '): Combines all elements in the list with a comma and a space.

2. map('string'): Ensures all elements are converted to strings before joining. This is especially useful when dealing with mixed data types.

Output:

`yaml

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.