如何解决在 Jinja 模板中使用仆从定位
SaltStack 允许在命令行上使用精确的 targeting of minions,例如:
salt 'prefix*' grains.items
^^^^^^^
有什么方法可以在 Jinja 模板中使用相同的方式来定位小兵吗?我想遍历给定匹配器定位的主机,例如:
{% for minion in salt.minions['prefix*'] %}
^^^^^^^
很遗憾,我在 official help on using Jinja 中没有找到任何东西。
解决方法
从您发布的其他评论来看,您似乎正在寻找 Salt mine 功能。使用 Salt mine,我们可以从 Minion 收集数据(到 Master),并使用(通常)其他 Minion 的数据。
Salt Mine 可以在 minion 配置文件或 minion 的支柱中启用,但格式相同。
举个例子:
考虑以下 4 个仆从:
web1.example.local
db1.example.local
db2.example.local
db3.example.local
现在在 db.sls
随从的支柱文件 (dbX
) 中,我将两个 Salt 模块定义为 Mine 函数,以获取主机名和额外的 IP 地址。
mine_functions:
network.get_hostname: []
network.ip_addrs: []
请注意,地雷和支柱可能需要更新 (mine.update
)/刷新 (saltutil.refresh_pillar
) 才能反映此更改。
现在上面的任何 Mine 函数都可以被 Mine module's get
函数引用。可以以通常的方式定位小兵 - 通配符、谷物、复合等。
示例 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_id
和 hostname
的行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。