salt-stack - Saltstack 在编排中获得一个 minion 的 grains

标签 salt-stack salt-cloud

我正在使用 salt-cloud 来部署虚拟机,并且我正在尝试使用 Saltstack Reactor 系统将它们注册到我的 DNS 中。

我有一个带有这个触发器的 reactor.conf:

reactor:
  - 'salt/cloud/*/created':           # Add a VM
    - /srv/reactor/initialize_vm.sls

initilize_vm.sls:

invoke_orchestrate_add_to_dns:
  runner.state.orchestrate:
    - mods: orch.add_to_dns
    - pillar:
        event_name: {{ name }}
        event_profile: {{ profile }}

orch/add_to_dns.sls:

{% set name = pillar['event_name'] %}
{% set profile = pillar['event_profile'] %}

vm-add-dns-{{ name }}:
  sqlite3.row_present:
    - db: /var/lib/powerdns/pdns.sqlite3
    - table: records
    - where_sql: "name='{{ name }}' and type='A'"
    - data:
        domain_id: 1
        name: {{ name }}
        type: A
        content: {{ ??? }}
        ttl: 300
        prio: 0
        disabled: 0

我只需要知道新 minion 的 IP 地址。但是当编排在 master 上运行时,我不能只做 content: {{ grains['fqdn_ip4'] }}

获取 minions 信息有什么想法吗?

最佳答案

您可以使用 salt 矿从奴才那里获取信息。要使用 salt 矿,你需要知道你想从哪个仆从那里获得信息。幸运的是, react 堆从事件总线接收数据。 data['id'] 包含 minion ID。

在 salt 矿中,您可以添加一个函数来检索 minions IP,如下所示:

mine_functions:
  public_ip4:
    - mine_function: grains.get
    - fqdn_ip4

现在您可以在您的 sls 文件中使用 mine.get 从 minion 获取 IP 地址。在您的情况下,它将是您刚刚从事件总线收到的 minion ID,如下所示:

{%- for server, addrs in salt['mine.get'](data['id']', 'public_ip4') %}
  {{ addrs[0] }}
{% endfor %}

注意事项:

  • 我没有为 DNS 使用 Salt Cloud 和编排,所以我无法结合使用 你的代码和我的代码并检查它是否有效。我希望它会有用 给你:)
  • 我将矿井命名为 public_ip4 而不是 fqdn_ip4。这是为了
    澄清这是 salt 矿中​​的名称,而不是您的 Cereal
    正在请求。

关于salt-stack - Saltstack 在编排中获得一个 minion 的 grains,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44933201/

相关文章:

salt-stack - 使不存在的支柱导致警告或错误

python - Saltstack 通过事件和 salt-call 管理和查询理货/阈值?

mysql - 如果目录为空,则仅在 Salt 中执行命令

salt-stack - 如何指示saltstack重新加载firewalld?

salt-stack - 有没有办法从 .sls 或 .jnija 文件中记录 saltstack 中的调试消息?

deployment - 与 Terraform 相比,为什么 salt 云这么慢?

salt-stack - SaltStack - 信标不监控文件

python - 如何在 CentOS 7 中更改 Salt 的默认 Python?