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

牧云@^-^@ 提交于 2019-11-30 01:15:59

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.

Alex's answer is great. The Salt Mine will give you the list of minions that's correct as of the last time the Mine was executed.

If you want live up to the second data you can use the peer interface by using the publish module. Publish module docs are here: http://docs.saltstack.com/ref/modules/all/salt.modules.publish.html#module-salt.modules.publish

{% for host in salt['publish.publish']('*', 'network.ip_addrs', 'eth0') %}
[{{ host.fqdn }}]
    address {{ host.ip }}
    use_node_name yes
{% endfor %}

Make sure to set your master config to allow the minions to execute network.ip_addrs.

EDIT:

To answer a question below you must enable the host to query other minions through the peer publish interface. To allow all minions to query the ip addresses of all other minions, add this to your /etc/salt/master:

peer:                                                                          
  .*:
    - network.ip_addrs

Why not use minion.list module?

In our pillar environment we have pillar that are private to each minion (/srv/pillar/hosts/[server_A, server_B, server_C...]/some_pillar.sls).

To make things easier (since some people keep forgetting to add new pillars to the top file) our pillar top file looks like this:

{{ saltenv }}:
  {% for minion in salt['minion.list']()['minions'] -%}
  {{ minion + '*' }}:
    - hosts.{{ minion.split('.')[0] }}
  {% endfor -%}

This way I can get a list of all minions known to the master every time the pillar enviorment is updated.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!