Accumulating a list in Ansible

135 views
Skip to first unread message

Kevin Raison

unread,
Jul 17, 2015, 7:59:14 PM7/17/15
to ansible...@googlegroups.com
Hello, group.  I am still a novice with Ansible, so perhaps my approach is flawed, so if there is a better way, I am happy to hear about it.  I have a situation where I need to accumulate values into an Ansible list variable on a role-by-role basis, and then use the contents of that list in another role in order to populate a config file template.  So, suppose I have these roles:

- roles:
  - service1
  - service2
  - service3
  - make-config-file

And a variable 'services'.  I would like to end up with services having a value of [ service1, service2, service3 ] by the time 'make-config-file' is executed so that it can write those values out to the config file.

So, the question is, how do I push a value onto the 'services' list in each role?  I understand how to get the values from the list into the config file, I am just not sure how to accumulate a list in Ansible.

Thanks,
Kevin

Brian Coca

unread,
Jul 18, 2015, 10:52:45 PM7/18/15
to ansible...@googlegroups.com
you can use union filter:

services: "{{service1|union(service2)|union(service3)}}"

--
Brian Coca

Abhijit Menon-Sen

unread,
Jul 19, 2015, 9:06:17 PM7/19/15
to ansible...@googlegroups.com
At 2015-07-18 22:52:40 -0400, bc...@ansible.com wrote:
>
> you can use union filter:
>
> services: "{{service1|union(service2)|union(service3)}}"

Brian, thanks for the tip.

Is there any way to do the moral equivalent of "list_behaviour=append"?
In other words, to be able to append items to an already-declared list?

I originally wanted this so that roles could declare all the packages
they needed, and they could be installed in one go by a common task.
There are many other (better) reasons, e.g. modifying my PostgreSQL
configuration if I'm also installing the postgres_replication role.

Would anyone else find this useful?

-- Abhijit

P.S. I'm open to suggestions for some way to do this using a local
plugin of some sort. I just want to get it to work somehow.
Reply all
Reply to author
Forward
0 new messages