salt-stack - 如何将一个仆从的谷物传递给另一个仆从?
问题描述
我正在使用 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>
是硬编码的。我宁愿查询小兵,找到具有正确角色的小兵并以编程方式提取其 IP 地址。
当/srv/pillar/dns/dnsserv.sls
被处理时,它使用角色“dns-server”的minion可用的信息进行处理。roles.yaml
通过在里面加载,dnsserv.sls
我可以设法获取 gitlab-server 的 minion ID(带有一些非常难看的代码)。但是我怎样才能从这个文件中获取它的 IP 呢?
我已经看到提到盐矿,但还没有真正找到如何使用此功能的完整示例。
这个问题很可能是 XY 问题的一个例子。如果是这样,将非常感谢“正确方式”的示例。
解决方案
要将谷物或支柱从一个仆从传递到另一个仆从,您需要使用“盐矿”(https://docs.saltstack.com/en/latest/topics/mine/)。题目不简单,简略:
- 定义一个可供你的奴才可用的新 mine_function,例如
mine_functions:
grains:
grains.items: []
- 然后在你的状态下使用 mine.get https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.mine.html#salt.modules.mine.get
我建议您在开始写入状态之前先在命令行上尝试 mine.get 以查看是否能够检索数据。
推荐阅读
- filepond - 如何从文件池中为 vue 中的其他组件获取图像 blob
- xamarin - 在模块 Windows.winmd 中找不到类型 Windows.UI.Xaml.Media.XamlLight
- php - 使用jquery编辑和保存数据表的行数据
- python-3.x - 根据特定列组合列表并删除重复项
- typo3 - 内容元素作为内容元素中的内联元素
- laravel - 如何在不让他们最初使用它注册的情况下使用 facebook 登录用户?
- php - 使用 Google 的 PHP 客户端库连接到 BigTable 时出错
- reactjs - 使用 React Hooks 时出现 UseState 错误
- syndesis - 当我没有集群:管理员权限时,如何在 OpenShift 上安装 Syndesis。这甚至可能吗?
- reactjs - TypeError:这是未定义的?