Saltstack получить зерна миньона в оркестровке
Я использую солидное облако для развертывания виртуальных машин и пытаюсь зарегистрировать их в своем DNS с помощью системы Saltstack 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 ответа
Вы можете использовать Соляную шахту, чтобы получить информацию от миньонов. Чтобы использовать Соляную шахту, вам нужно знать, от какого миньона вы хотите получить информацию. К счастью, реактор получает данные от шины событий. data['id']
содержит идентификатор миньона
В Salt Mine вы можете добавить функцию для получения IP миньонов, например так:
mine_functions:
public_ip4:
- mine_function: grains.get
- fqdn_ip4
Теперь вы можете использовать mine.get
в ваших файлах sls, чтобы получить IP-адрес от миньона. В вашем случае это будет идентификатор миньона, который вы только что получили из шины событий, например:
{%- for server, addrs in salt['mine.get'](data['id']', 'public_ip4') %}
{{ addrs[0] }}
{% endfor %}
Заметки:
- Я не использую Salt Cloud и оркестровку для DNS, поэтому не могу объединить ваш код с моим и проверить, работает ли он. Я надеюсь, что это будет полезно для вас:)
- Я назвал мой
public_ip4
вместоfqdn_ip4
, Это к
уточнить, что это имя в соляной шахте, а не зерно, которое вы
просят.
Если вы не хотите добавлять конфигурацию, вы также можете сделать следующее:
{% 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] %}
Решил добавить это сюда как ссылку для других.