Saltstack在编排中得到一个奴才的谷物

时间:2017-07-05 18:09:23

标签: salt-stack salt-cloud

我正在使用salt-cloud来部署虚拟机,我正试图让他们在我的DNS中使用Saltstack Reactor系统进行注册。

我有一个带有此触发器的 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地址。但是当编排在主人身上时,我不能只做一个内容:{{grains ['fqdn_ip4']}}

任何关于获取仆从信息的想法?

2 个答案:

答案 0 :(得分:1)

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

在盐矿中,您可以添加一个功能来检索这样的小兵IP:

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

现在,您可以在sls文件中使用mine.get从小精灵那里获取IP地址。在你的情况下,它将是你刚刚从事件总线收到的小兵ID:

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

注意:

  • 我没有将Salt Cloud和业务流程用于DNS,因此我无法合并 我的代码与我的代码,检查它是否有效。我希望它会有用 为你:))
  • 我将我的名字命名为public_ip4而不是fqdn_ip4。它是对 澄清这是盐矿中​​的名称而不是谷物 请求。

答案 1 :(得分:0)

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

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

或者如评论中所述:

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

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