【问题标题】:Use minion targeting within Jinja templates在 Jinja 模板中使用 minion 定位
【发布时间】:2021-03-16 18:45:40
【问题描述】:

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

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

有没有办法在 Jinja 模板中使用相同的方法来定位小兵?我想遍历给定匹配器的目标主机,例如:

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

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

【问题讨论】:

  • 通过迭代需要其他minions提供哪些具体信息?
  • 我需要来自可以使用其主机名选择的支柱的数据。我需要一个配置文件,该文件应该包含每个其他主机(匹配目标标准)的条目,而不是应用状态的主机。
  • Pillar data 设计用于基于支柱top.sls 中可用的目标的小兵。一旦根据要求进行了配置,就不需要从 Jinja 定位。
  • 谢谢,但这并不能解决所有用例。我也想例如按颗粒选择数据。他们的主机名不收集在支柱中。很抱歉没有早点澄清这一点。

标签: jinja2 salt-stack


【解决方案1】:

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

盐矿可以在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 函数都可以被 Mine module's get 函数引用。 Minion 可以以通常的方式作为目标 - 通配符、谷物、化合物等。

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

{% 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

【讨论】:

  • 感谢您的冗长。将尽快检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多