我正在使用 SaltStack 来管理一些虚拟机。我正在寻找一种方法来呈现在 top.sls 文件中附加了指定 .sls 的 minion 的 ID/主机名,或在启用 jinja 模板的文件中呈现特定状态的方法。我想这样做的原因是我可以轻松地引用客户端配置中的服务器,而无需在任何地方硬编码值。例如;
/srv/salt/top.sls:
base:
'desktoppc01':
- generic.dns
'bind9server01':
- generic.dns
- bind9
/srv/salt/generic/dns/init.sls:
/etc/resolv.conf:
file:
- managed
- source: salt://generic/dns/files/resolv.conf
- mode: 644
- template: jinja
最后,
/srv/salt/generic/dns/files/resolv.conf:
domain {{ pillar['domain_name'] }}
search {{ pillar['domain_name'] }}
nameserver {{ list_minions_with_state['bind9'] }}
我具体追求的是等同于{{ list_minions_with_state['bind9'] }}
(我只是为了演示而编造的)。我以为这将是非常普遍需要的东西,但是在搜索模块页面之后,我还没有找到任何东西。
目前,我让客户从支柱获取信息,但这必须手动配置,这感觉不值得花时间。
我希望我可以通过for
循环扩展这个想法,以便在创建服务器时动态添加它们。
编辑:
使用与 top.sls 具有相同数据和层次结构的文件,渲染
base:
{% for server_id in salt['pillar.get']('servers') %}
'{{ server_id }}':
{% for states in salt['pillar.get']('servers:{{ server_id }}') %}
- {{ states }}
{% endfor %}
{% endfor %}
给你
base:
'desktoppc01':
'bind9server01':
我尝试了一些变化,{{ server_id }}
但没有成功。除非有一种简单的方法可以在该函数中使用支柱变量,否则我正在考虑提出一个功能请求并称之为一天。