How to get a list of all salt minions in a template?

Alex picture Alex · Jun 18, 2013 · Viewed 11.5k times · Source

Basically I am creating a Salt state describing Munin server configuration and I need to get a list of all minions known to the master, something like this:

{% for host in pillar['munin_clients'] %}
[{{ host.fqdn }}]
    address {{ host.ip }}
    use_node_name yes
{% endfor %}

The only difference is that I don't want to use pillar for that, I need this list to be populated dynamically. ret.get_minions seems to be relevant but I can't make it work for some reason. What are my options?

Answer

Alex picture Alex · Jun 19, 2013

I managed to achieve this using Salt Mine system (thanks to members of Salt-users Google group):

{% for host, hostinfo in salt['mine.get']('*', 'network.interfaces').items() %}
[{{ host }}]
    address {{ hostinfo['eth0']['inet'][0]['address'] if hostinfo['eth0'].has_key('inet') else hostinfo['br0']['inet'][0]['address'] }}
    use_node_name yes
{% endfor %}

I had to add

mine_functions:
  network.interfaces: []

to the end of /etc/salt/minion on every node to enable Salt Mine.