Saltstack получает IP-адрес с помощью mine.get

Я пытаюсь создать шаблон, в котором он будет получать IP-адрес консул-серверов как DNS, используя mine.get. В командной строке вроде работает нормально, но при использовании в контексте шаблона ничего не возвращает

Вот моя установка

В /srv/pillar я добавил mines.sls и изменил top.sls следующим образом

мины.sls

mine_functions:
  network.ip_addrs: []

топ.sls

base:
  '*':
    - mines

После обновления столбцов и использования mine.send и mine.update я мог запросить у сервера saltmaster IP-адреса для консула.

sudo salt 'redis*' mine.get 'consul*' network.ip_addrs
redis-001-stage.c.project-gce.internal:
    ----------
    consul-001-adm.c.project-gce.internal:
        - 192.16.0.1
    consul-002-adm.c.project-gce.internal:
        - 192.16.0.2

Я попытался применить тот же принцип в файле состояния, используя шаблоны.

# Resolver Configuration
resolv-file:
  file.managed:
    - name: /etc/resolv.conf
    - user: root
    - group: root
    - mode: '0644'
    - source: salt://resolver/files/resolv.conf
    - template: jinja
    - defaults:
        nameservers: {{ salt['mine.get']('*', 'network.ip_addrs', 'eth1').items() }}

и в разрешении.conf

{%- for nameserver in nameservers %}
nameserver {{ nameserver }}
{%- endfor %}

но серверы имен всегда пустые, может кто-нибудь посоветовать?


person Mo J. Mughrabi    schedule 20.11.2015    source источник


Ответы (1)


Вы передали имя интерфейса eth1 в качестве третьего параметра в mine.get, но этот параметр используется для тип соответствия, который вы хотите использовать для первого параметра.

Оставьте его, и вы получите список IP-адресов. Как только это возвращает значения, мне не удалось передать полный список адресов в шаблон jinja. Вместо этого я оценил mine.get внутри шаблона resolv.conf.

Это заставило меня работать:

resolv-file:
  file.managed:
    - name: /tmp/resolv.conf
    - source: salt://resolv.conf
    - template: jinja

а потом

{%- for server, addr in salt['mine.get']('*', 'network.ip_addrs').items() %}
nameserver {{ addr[0] }} # {{ server }}
{%- endfor %}

Кстати: вы также можете запустить агент-консул локально и перенаправить запросы DNS, специфичные для консула, вашему локальному агенту-консулу (который, в свою очередь, разрешает их из каталога службы). При использовании dnsmasq и Network Manager это может выглядеть так: этот скрипт я загрузил на Github.

person ahus1    schedule 23.11.2015