# Ansible template loop with iteritems

**URL:** <https://forum.ansible.com/t/ansible-template-loop-with-iteritems/27336>\
**Category:** Ansible Project\
**Created:** [April 20, 2018, 11:53am UTC](https://forum.ansible.com/t/ansible-template-loop-with-iteritems/27336 "2018-04-20T11:53:27Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![vladciobancai](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vladciobancai/32/11320_2.png) [@vladciobancai](https://forum.ansible.com/u/vladciobancai)\
**Post date:** [April 20, 2018, 11:53am UTC](https://forum.ansible.com/t/ansible-template-loop-with-iteritems/27336/1 "2018-04-20T11:53:27Z")

</div>

Hi,

I would like to create dynamically some configuration files (the configs are used by tomcat) using a template based some variables from group\_vars

Below is what I have

- group\_vars/test.yml

file:

- log4j
- config

log4j:  
log4j.rootCategory: INFO  
log4j.appender.SYSLOG: org.apache.log4j.net.SyslogAppender  
log4j.appender.SYSLOG.syslogHost: testhost

jira:  
jira.soap.url: [https://hostname](https://hostname/)  
jira.login.username: test  
jira.login.password: test14

- roles/test/main.yml

- name: ‘Configure the application properties’  
template:  
src: “template.j2”  
dest: “/tmp/{{ item }}.properties”  
owner: build  
group: build  
backup: yes  
with\_items: “{{ file }}”

- roles/test/template/template.j2

{% for key, value in {{ item.iteritems() }} %}  
{{ key }}= {{ value }}  
{% endfor %}

So I would like to iterate every “file” and to create the files  
I’m receiving “msg”: “AnsibleError: template error while templating string: expected token ‘:’, got ‘}’. String: ## File managed by ansible ##\n\n{{ item }}\n{{ propertyfiles }}\n\n{% for i in {{ propertyfiles }} %}\n {% for key, value in i.items() %}\n {{ key }}= {{ value }}\n {% endfor %} \n{% endfor %} \n”}

---

<div class="post-metadata">

**Author:** ![Kai\_Stian\_Olstad](https://avatars.discourse-cdn.com/v4/letter/k/e19adc/32.png) [@Kai\_Stian\_Olstad](https://forum.ansible.com/u/Kai_Stian_Olstad)\
**Post date:** [April 20, 2018, 1:20pm UTC](https://forum.ansible.com/t/ansible-template-loop-with-iteritems/27336/2 "2018-04-20T13:20:42Z")

</div>

You are already in jinja template mode between {% %} so you can't use {{ }} there.

{% for key, value in item.iteritems() %}

---

<div class="post-metadata">

**Author:** ![vladciobancai](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vladciobancai/32/11320_2.png) [@vladciobancai](https://forum.ansible.com/u/vladciobancai)\
**Post date:** [April 20, 2018, 1:29pm UTC](https://forum.ansible.com/t/ansible-template-loop-with-iteritems/27336/3 "2018-04-20T13:29:25Z")

</div>

I’m receiving the folllowing error “msg”: “AnsibleUndefinedVariable: ‘ansible.utils.unsafe\_proxy.AnsibleUnsafeText object’ has no attribute ‘iteritems’”}

---

<div class="post-metadata">

**Author:** ![Kai\_Stian\_Olstad](https://avatars.discourse-cdn.com/v4/letter/k/e19adc/32.png) [@Kai\_Stian\_Olstad](https://forum.ansible.com/u/Kai_Stian_Olstad)\
**Post date:** [April 20, 2018, 1:41pm UTC](https://forum.ansible.com/t/ansible-template-loop-with-iteritems/27336/4 "2018-04-20T13:41:10Z")

</div>

I didn't look at what you where trying to do I just saw the syntax error.

But I see what you are trying to do, I'm not sure but maybe this work

{% for key, value in vars[item].iteritems() %}

---

<div class="post-metadata">

**Author:** ![vladciobancai](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vladciobancai/32/11320_2.png) [@vladciobancai](https://forum.ansible.com/u/vladciobancai)\
**Post date:** [April 20, 2018, 1:44pm UTC](https://forum.ansible.com/t/ansible-template-loop-with-iteritems/27336/5 "2018-04-20T13:44:21Z")

</div>

Works, thank you for your help.

---

<div class="post-metadata">

**Author:** ![vladciobancai](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vladciobancai/32/11320_2.png) [@vladciobancai](https://forum.ansible.com/u/vladciobancai)\
**Post date:** [April 20, 2018, 2:01pm UTC](https://forum.ansible.com/t/ansible-template-loop-with-iteritems/27336/6 "2018-04-20T14:01:05Z")

</div>

I have another question, after I applied the changes, now every line in the files contains a new empty line. It is possible to be removed ?

{% for key, value in vars[item].iteritems()| sort %}  
{{ key }}= {{ value }}  
{% endfor %}

log4j.appender.MAIN\_APPENDER= org.apache.log4j.RollingFileAppender

log4j.appender.MAIN\_APPENDER.File= /tmp/log4j.log

log4j.appender.MAIN\_APPENDER.MaxBackupIndex= 5

---

<div class="post-metadata">

**Author:** ![Kai\_Stian\_Olstad](https://avatars.discourse-cdn.com/v4/letter/k/e19adc/32.png) [@Kai\_Stian\_Olstad](https://forum.ansible.com/u/Kai_Stian_Olstad)\
**Post date:** [April 23, 2018, 6:49am UTC](https://forum.ansible.com/t/ansible-template-loop-with-iteritems/27336/7 "2018-04-23T06:49:51Z")

</div>

I don't know why since you shouldn't unless you input contain extra whitespaces.

You can try to use {%- and/or -%} to remove whitespaces, more on the subject here  
[http://jinja.pocoo.org/docs/2.10/templates/#whitespace-control](http://jinja.pocoo.org/docs/2.10/templates/#whitespace-control)

---

<div class="post-metadata">

**Author:** ![vladciobancai](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vladciobancai/32/11320_2.png) [@vladciobancai](https://forum.ansible.com/u/vladciobancai)\
**Post date:** [April 23, 2018, 7:17am UTC](https://forum.ansible.com/t/ansible-template-loop-with-iteritems/27336/8 "2018-04-23T07:17:54Z")

</div>

Thank you Kai for all the support, works OK
