Gathering list of unique variable values and number of servers with each value

35 views
Skip to first unread message

js

unread,
Mar 18, 2015, 8:37:58 PM3/18/15
to ansible...@googlegroups.com
Hi,

I have an inventory file set up like this:
[loc1]
server1
server2

[loc1:vars]
loc_name="location1"

[loc2]
server3

[loc2:vars]
loc_name="location2"

[loc3]
server4
server5
server6

[loc3:vars]
loc_name="location3"

I want to create a configuration file on all the servers containing all the different locations and the number of members in each location. Example:
location1: 2,
location2: 1,
location3: 3

The number of different loc_names can vary. Is there a simple Jinja2 template that can yield those results? I'm worried that I'm approaching this from the wrong angle or that I set up the inventory in a way that is anti-Ansible; I want to avoid creating a convoluted template file if at all possible.

Any suggestions? Thanks!

Brian Coca

unread,
Mar 18, 2015, 8:40:18 PM3/18/15
to ansible...@googlegroups.com
you have all the locations in the groups dictionary and you can get
the number of hosts by looking at the length of each group's host
list.

{% for loc in groups %}
{{loc +': ' + groups[loc]|length,}}
...




--
Brian Coca

js

unread,
Mar 19, 2015, 9:06:07 AM3/19/15
to ansible...@googlegroups.com
Unfortunately, I may have made the example too simple. The actual inventory file has more groups and not all the groups are just locations. Furthermore, the group names are not necessarily the same as the "loc_name" variable. For example, in addition to the location groups, we could have groups like:

[master-server]
server4

[loadbalancer]
server6

Which should not show up in the breakdown.

Thanks.

Brian Coca

unread,
Mar 19, 2015, 9:32:24 AM3/19/15
to ansible...@googlegroups.com
add an {% if loc.startswith('location') %}



--
Brian Coca

js

unread,
Mar 19, 2015, 11:17:39 AM3/19/15
to ansible...@googlegroups.com
Alright, so it looks like the only way would be to key off a specifically formatted group name?

I was hoping to be able to rely on the variable alone. Ideally, an inventory could look like this (no groups):

server1 loc_name="location1"
server2 loc_name="location1"
server3 loc_name="location2"
server4 loc_name="location3"
server5 loc_name="location3"
server6 loc_name="location3"

But that might be getting away from proper Ansible design.

I appreciate the input you've given, thanks!

Brian Coca

unread,
Mar 19, 2015, 11:22:16 AM3/19/15
to ansible...@googlegroups.com
you could just create a variable with the list of 'location groups'
and iterate over that.



--
Brian Coca
Reply all
Reply to author
Forward
0 new messages