16

基本上我正在创建一个描述 Munin 服务器配置的 Salt 状态,我需要获取 master 已知的所有 minions 的列表,如下所示:

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

唯一的区别是我不想为此使用支柱,我需要动态填充此列表。ret.get_minions似乎是相关的,但由于某种原因我无法使其工作。我有哪些选择?

4

3 回答 3

15

我设法使用 Salt Mine 系统实现了这一点(感谢 Salt-users 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以启用盐矿。

于 2013-06-18T23:59:52.933 回答
10

亚历克斯的回答很棒。Salt Mine 将为您提供截至最后一次执行 Mine 时正确的仆从列表。

如果您想不辜负第二个数据,您可以使用发布模块来使用对等接口。发布模块文档在这里: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 %}

确保将您的主配置设置为允许 minions 执行 network.ip_addrs。

编辑:

要回答以下问题,您必须使主机能够通过对等发布接口查询其他 Minion。要允许所有 minions 查询所有其他 minions 的 IP 地址,请将其添加到 /etc/salt/master:

peer:                                                                          
  .*:
    - network.ip_addrs
于 2013-08-08T04:03:08.530 回答
4

为什么不使用 minion.list 模块?

在我们的支柱环境中,我们有每个 minion 私有的支柱 (/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 -%}

这样,每次更新支柱环境时,我都可以获得主人已知的所有仆从的列表。

于 2017-07-13T09:12:57.110 回答