# set fact - concatenate to the same list -iterating over with items

**URL:** <https://forum.ansible.com/t/set-fact-concatenate-to-the-same-list-iterating-over-with-items/19252>\
**Category:** Ansible Project\
**Created:** [September 14, 2015, 6:47am UTC](https://forum.ansible.com/t/set-fact-concatenate-to-the-same-list-iterating-over-with-items/19252 "2015-09-14T06:47:00Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![trupti\_mali](https://avatars.discourse-cdn.com/v4/letter/t/73ab20/32.png) [@trupti\_mali](https://forum.ansible.com/u/trupti_mali)\
**Post date:** [September 14, 2015, 6:47am UTC](https://forum.ansible.com/t/set-fact-concatenate-to-the-same-list-iterating-over-with-items/19252/1 "2015-09-14T06:47:00Z")

</div>

Hi,  
I am facing one issue here. I want to loop over the existing list using with items and create another list using previous list values.

- name: collect iptables exception lines

set\_fact:

exceptions: "{{ exceptions | union([ ‘-A INPUT -p tcp --source {{ item }} --dport 3306 -j ACCEPT’ ,

‘-A INPUT -p tcp --source {{ item }} --dport 4567 -j ACCEPT’]) }}"

with\_items: web\_ips

When I run above playbook, i get err

fatal: [db\_node1] =\> Failed to template {{ exceptions | union([‘-A INPUT -p tcp --source {{ item }} --dport 3306 -j ACCEPT’,‘-A INPUT -p tcp --source {{ item }} --dport 4567 -j ACCEPT’) }}: an unexpected type error occurred. Error was coercing to Unicode: need string or buffer, list found

my ansible version is 1.9.3.

---

<div class="post-metadata">

**Author:** ![Brian\_Coca](https://avatars.discourse-cdn.com/v4/letter/b/6de8d8/32.png) [@Brian\_Coca](https://forum.ansible.com/u/Brian_Coca)\
**Post date:** [September 14, 2015, 4:14pm UTC](https://forum.ansible.com/t/set-fact-concatenate-to-the-same-list-iterating-over-with-items/19252/2 "2015-09-14T16:14:45Z")

</div>

moustaches don't stack:

&nbsp;&nbsp;set\_fact:

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exceptions: "{{ exceptions | union([ '-A INPUT -p tcp --source '  
+ item + ' --dport 3306 -j ACCEPT' ,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'-A INPUT  
-p tcp --source ' + item + ' --dport 4567 -j ACCEPT']) }}"

---

<div class="post-metadata">

**Author:** ![trupti\_mali](https://avatars.discourse-cdn.com/v4/letter/t/73ab20/32.png) [@trupti\_mali](https://forum.ansible.com/u/trupti_mali)\
**Post date:** [September 15, 2015, 7:12am UTC](https://forum.ansible.com/t/set-fact-concatenate-to-the-same-list-iterating-over-with-items/19252/3 "2015-09-15T07:12:05Z")

</div>

> Thanks for the response Brian. I tried your solution but the same error sticks around

Failed to template {{ exceptions | union([‘-A INPUT -p tcp --source ‘+ item + ’ --dport 3306 -j ACCEPT’,’-A INPUT -p tcp --source ‘+ item +’ --dport 4567 -j ACCEPT’,‘-A INPUT -p tcp --source ‘+ item +’ --dport 4568 -j ACCEPT’]) }}: an unexpected type error occurred. Error was coercing to Unicode: need string or buffer, list found

Its refusing to accept list contents inside union function which is strange.

~Trupti

---

<div class="post-metadata">

**Author:** ![Brian\_Coca](https://avatars.discourse-cdn.com/v4/letter/b/6de8d8/32.png) [@Brian\_Coca](https://forum.ansible.com/u/Brian_Coca)\
**Post date:** [September 15, 2015, 1:52pm UTC](https://forum.ansible.com/t/set-fact-concatenate-to-the-same-list-iterating-over-with-items/19252/4 "2015-09-15T13:52:50Z")

</div>

I did not realize, you are self referencing exceptions, that won't work

---

<div class="post-metadata">

**Author:** ![trupti\_mali](https://avatars.discourse-cdn.com/v4/letter/t/73ab20/32.png) [@trupti\_mali](https://forum.ansible.com/u/trupti_mali)\
**Post date:** [September 16, 2015, 1:24pm UTC](https://forum.ansible.com/t/set-fact-concatenate-to-the-same-list-iterating-over-with-items/19252/5 "2015-09-16T13:24:37Z")

</div>

Oh well I guessed so. Then how to solve this problem of concatenating values by iterating in a with\_items loop?

---

<div class="post-metadata">

**Author:** ![Olve\_Hansen](https://avatars.discourse-cdn.com/v4/letter/o/e68b1a/32.png) [@Olve\_Hansen](https://forum.ansible.com/u/Olve_Hansen)\
**Post date:** [September 16, 2015, 8:48pm UTC](https://forum.ansible.com/t/set-fact-concatenate-to-the-same-list-iterating-over-with-items/19252/6 "2015-09-16T20:48:28Z")

</div>

```auto
- set_fact:
    zk_connection_: >
      {%- set servers = [] %}
      {%- for host in groups['zk_servers'] %}
      {%- set _ = servers.append(hostvars[host]['ansible_' +iface]['ipv4']['address']) %}
      {%- endfor %}
      {{- servers -}}

```

Is how I have done it. I got some help on IRC to solve the initials, and now I use this jinja2 inline template instead of doing it through a proper template and load the result as a variable. Guess you can swap the 'groups[‘zk\_servers’] with your variable and the append part you will have to figure out yourself 🙂

HTH
