Ansible — loop over netsted variables

ILYA Reshetnikov
1 min readDec 3, 2019

--

I’ve started using Ansible at my work, where we use it to deploy Splunk environments.

One of the things I needed to do is to provide a list of tcp ports to a “with_items” statement in a form of list.

I have this vars file and I needed to filter out only the TCP ports

port:
dns:
tcp: 5001
udp: 5002
dual:
tcp: 6001
udp: 6002
relay:
tcp: 7001
udp: 7002

So here is how you can do it (in 2 steps) in Ansible.

- name: set_fact
set_fact:
tcp_ports: "{% for feed in port %}{{ port[feed]['tcp'] }},{% endfor %}"

- name: print tcp ports
debug:
msg: "{{ item }}"
with_items:
- "{{ (tcp_ports| regex_replace(',$', '')).split (',') | list }}"

Of course you can replace the debug msg with whatever other action you need.
By the way if you know how to do it in single step please let me know.

Originally published at http://isbyr.com on December 3, 2019.

--

--

ILYA Reshetnikov
ILYA Reshetnikov

Written by ILYA Reshetnikov

Find me on Twitter @IlyaReshet and my blog https://ISbyR.com

No responses yet