【问题标题】:How do I pass the grains of one minion to another?如何将一个仆从的谷物传递给另一个仆从?
【发布时间】:2018-12-27 12:22:44
【问题描述】:

我正在使用 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

现在&lt;GIT_SERVER_IP&gt; 是硬编码的。我宁愿查询小兵,找到具有正确角色的小兵并以编程方式提取其 IP 地址。

/srv/pillar/dns/dnsserv.sls 被处理时,它会使用角色“dns-server”的minion 可用的信息进行处理。通过在dnsserv.sls 中加载roles.yaml,我可以设法获取gitlab-server 的minion ID(带有一些非常丑陋的代码)。但是我怎样才能从这个文件中获取它的 IP 呢?

我看到有人提到盐矿,但还没有真正找到如何使用此功能的完整示例。

这个问题很可能是 XY 问题的一个例子。如果是这样,将非常感谢“正确方式”的示例。

【问题讨论】:

    标签: salt-stack


    【解决方案1】:

    要将谷物或支柱从一个仆从传递给另一个仆从,您需要使用“盐矿”(https://docs.saltstack.com/en/latest/topics/mine/)。题目不简单,简短:

    • 定义一个可供你的仆从使用的新 mine_function,例如
    mine_functions:
      grains:
        grains.items: []
    

    我建议你在开始写入状态之前先在命令行上尝试 mine.get 以查看是否能够检索数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      • 2021-10-25
      • 2018-02-05
      相关资源
      最近更新 更多