我正在使用Salt来配置许多服务器。其中两台分配了DNS服务器的角色,并使用dnsmasq-formula进行了配置。其他人则有不同的角色,比如在支柱中定义的gitlab-server。
这是如何配置的:
/srv/salt/top.sls
---
base:
'roles:dns-server':
- match: pillar
- dnsmasq
'roles:gitlab-server'
- gitlab
/srv/pillar/top.sls
---
{% import_yaml "roles.yaml" as r %}
base:
{% if 'dns-server' in r[grains['id']] %}
- dns.dnsserv
{% endif %}
/srv/pillar/dns/dnsserv.sls
---
dnsmasq:
...
hosts:
domain.name:
git: <GIT_SERVER_IP>
...
/srv/pillar/roles.yaml
---
'minion1-id':
- role1
- role2
'minion2-id':
- role3
- role4
# and so on现在<GIT_SERVER_IP>是硬编码的。我更愿意查询minion,找到具有正确角色的minion,并以编程方式提取其IP地址。
在处理/srv/pillar/dns/dnsserv.sls时,将使用具有"dns-server“角色的minion可用的信息对其进行处理。通过在dnsserv.sls中加载roles.yaml,我可以设法获得gitlab-server的minion ID (使用一些非常丑陋的代码)。但是我怎样才能从这个文件中获得它的IP呢?
我已经看到了关于盐矿的提及,但还没有真正找到一个完整的示例来使用这个功能。
这个问题很可能是XY问题的一个例子。如果是这样的话,一个“正确的方式”的例子将是非常感谢的。
发布于 2019-01-15 00:03:07
要将谷物或支柱从一个跟班传递到另一个跟班,您需要使用“盐矿”(https://docs.saltstack.com/en/latest/topics/mine/)。这个主题不是简单的,而是简短的:
mine_functions:
grains:
grains.items: []然后在您所在的州与https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.mine.html#salt.modules.mine.get一起使用
我建议您在开始编写状态之前,先在命令行上尝试mine.get,看看是否能够检索数据。
https://stackoverflow.com/questions/53945025
复制相似问题