基本上我正在创建一个描述Munin服务器配置的Salt状态,我需要得到一个主人知道的所有爪子的列表,如下所示:
{% for host in pillar['munin_clients'] %}
[{{ host.fqdn }}]
address {{ host.ip }}
use_node_name yes
{% endfor %}
唯一的区别是我不想使用支柱,我需要动态填充此列表。 ret.get_minions
似乎是相关的,但由于某些原因我无法使其发挥作用。我有什么选择?
答案 0 :(得分:15)
我设法使用Salt Mine系统实现了这一点(感谢Salt用户Google小组的成员):
{% 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 %}
我必须添加
mine_functions:
network.interfaces: []
到每个节点的/etc/salt/minion
末尾以启用Salt Mine。
答案 1 :(得分:9)
如果要实现第二个数据,可以使用发布模块使用对等接口。发布模块文档位于: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 %}
确保将主配置设置为允许小兵执行network.ip_addrs。
编辑:
要回答下面的问题,您必须启用主机通过对等发布界面查询其他小部件。要允许所有小兵查询所有其他小兵的IP地址,请将其添加到/ etc / salt / master:
peer:
.*:
- network.ip_addrs
答案 2 :(得分:3)
为什么不使用minion.list模块?
在我们的支柱环境中,我们拥有每个小兵专用的支柱(/ srv / pillar / hosts / [server_A,server_B,server_C ...] / some_pillar.sls)。
为了让事情变得更容易(因为有些人一直忘记在顶部文件中添加新的支柱),我们的支柱顶部文件如下所示:
{{ saltenv }}:
{% for minion in salt['minion.list']()['minions'] -%}
{{ minion + '*' }}:
- hosts.{{ minion.split('.')[0] }}
{% endfor -%}
这样,每次更新支柱环境时,我都可以获得主人知道的所有爪牙的清单。