【问题标题】:Saltstack get grains of a minion in orchestrationSaltstack在编排中获取小兵的颗粒
【发布时间】:2021-01-16 01:58:05
【问题描述】:

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

我只需要知道新仆从的 IP 地址。但由于编排在主服务器上运行,我不能只做 content: {{ grains['fqdn_ip4'] }}。

获取小兵信息的任何想法?

【问题讨论】:

    标签: salt-stack salt-cloud


    【解决方案1】:

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

    在 Salt Mine 中,您可以添加一个函数来检索 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 %}
    

    注意事项:

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

    【讨论】:

    • 感谢您的回答!我使用了 reactor 的编排,但从编排文件中我似乎无法从 Salt Mine 获取值...所以我改为从 reactor 调用颗粒缓存:{% set ip = salt[ 'saltutil.runner']('cache.grains', tgt=name)[name]['fqdn_ip4'][0] %} 解决我的问题:-)
    【解决方案2】:

    如果您不想添加配置,也可以执行以下操作:

    {% set ip = salt.saltutil.runner('salt.execute', [data['id']], {'fun': 'grains.get', 'kwarg': {'key':'fqdn_ip4'}})[data['id']] %}
    

    或如 cmets 中所述:

    {% set ip = salt['saltutil.runner']('cache.grains', tgt=data['id'])[data['id']]['fqdn_ip4'][0] %}
    

    我想我会在这里添加它作为其他人的参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 2018-07-27
      • 1970-01-01
      • 2017-07-29
      相关资源
      最近更新 更多