在按支柱过滤的Saltstack Jinja模板中获取minion ip

Get minion ip in Saltstack Jinja template filtered by pillar

我目前正忙于创建一个自动网络数据临时集群,这意味着我有一个主网络数据节点,从节点连接到该节点。 我找到了一个类似的 ,但我没有使用谷物,而是使用了柱子。

我正在尝试获取 Netdata 主 IP,并通过模板将其分发给 minions 运行 Netdata。但这也可以应用于其他主从配置(例如 postgres、elasticsearch 等)

我正在通过支柱分配角色。 所以我的支柱文件看起来像:

server:
  roles:
    - netdata-master
    - grafana

还有我的神社模板:

{% set netdatamaster = ..... %}
[stream]
  # stream metrics to another netdata
  enabled = yes

  # the IP and PORT of the master
  destination = {% netdatamaster %}:19999

现在我希望 var netdatamaster 包含 Netdata 主机的 ipv4 地址。我只是想不出办法来做到这一点。

你可以使用盐矿。

首先将 mine_function 添加到您的 netdata-master 服务器。这可以在 pillar 或 minion 配置文件中配置。

mine_functions:
  eth0_ip_addrs:
    mine_function: network.ip_addrs
    interface: eth0

上面的 mine_function 使其他 minions 可以为您的 netdata-master 服务器请求 network.ip_addrs 的值。

您可以通过不同的方式请求此数据:

  • 来自 cli:
    salt 'other_minion_id' mine.get 'netstat-master_id' eth0_ip_addrs

  • 在您的状态文件中:
    {{ salt['mine.get']('netstat-master_id', 'eth0_ip_addrs') }}

在您的情况下,您可以将其放在 Jinja 模板文件的顶部。
{% set netdatamaster = salt['mine.get']('netstat-master_id', 'eth0_ip_addrs') %}