如何将一个爪牙的谷物传递给另一个爪牙?

时间:2018-12-27 12:22:45

标签: 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”的奴才可用的信息进行处理。通过将roles.yaml加载到dnsserv.sls内,我可以设法获得gitlab-server的仆人ID(带有一些非常丑陋的代码)。但是如何从该文件获取其IP?

我已经看到过有关盐矿的提法,但并未真正找到如何使用此功能的完整示例。

这个问题很可能是XY问题的一个例子。如果是这样,将不胜感激“正确方法”的示例。

1 个答案:

答案 0 :(得分:1)

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

  • 为您的爪牙定义一个新的mine_function,例如
mine_functions:
  grains:
    grains.items: []

我建议您先开始在命令行上尝试mine.get,以查看是否能够检索数据,然后再开始写状态。