在 Jinja 模板中使用 minion 定位

Use minion targeting within Jinja templates

SaltStack 允许在命令行上精确 targeting of minions,例如:

salt 'prefix*' grains.items
      ^^^^^^^

有没有什么方法可以在 Jinja 模板中使用相同的方式来定位小兵?我想遍历给定匹配器所针对的主机,例如:

{% for minion in salt.minions['prefix*'] %}
                               ^^^^^^^

很遗憾,我在 official help on using Jinja 中没有找到任何内容。

从您发布的其他评论来看,您似乎正在寻找 Salt mine 功能。使用 Salt mine 我们可以从 minions 收集数据(掌握),并在(通常)其他 minions 上使用这些数据。

Salt Mine可以在minion配置文件中开启,也可以在minion的pillar中启用,但是格式是一样的。

举个例子:

考虑以下 4 个随从:

web1.example.local
db1.example.local
db2.example.local
db3.example.local

现在在 dbX 小兵的支柱文件 (db.sls) 中,我定义了两个 Salt 模块作为 Mine 函数来获取主机名和额外的 IP 地址。

mine_functions:
  network.get_hostname: []
  network.ip_addrs: []

请注意,地雷和支柱可能需要更新 (mine.update)/刷新 (saltutil.refresh_pillar) 才能反映此更改。

现在 Mine module's get 函数可以引用以上任意一个矿机函数。 Minion 可以用通常的方式作为目标 - 通配符、grains、化合物等。

示例 example.conf.j2 模板,我在其中呈现 minion id 和主机名。

{% for minion_id, hostname in salt['mine.get']('db*', 'network.get_hostname') | dictsort() %}
Minion id {{ minion_id }} has hostname {{ hostname }}
{% endfor %}

此模板可以在具有以下状态的 web1.example.local 上呈现:

create-example-conf:
  file.managed:
    - name: /tmp/example.conf
    - source: salt://example.conf.j2
    - mode: 0664
    - template: jinja

这将生成 /tmp/example.conf 文件,其中的行显示 minion_idhostname