当前位置 : 主页 > 网络推广 > seo >

salt-stack – Saltstack使用mine.get检索IP地址

来源:互联网 收集:自由互联 发布时间:2021-06-16
我试图创建一个模板,它将使用mine.get将DNS作为DNS检索领事服务器的IP地址.在命令行上它似乎工作正常,但在模板上下文中使用时它不返回任何东西 这是我的设置 在/ srv / pillar我添加了m
我试图创建一个模板,它将使用mine.get将DNS作为DNS检索领事服务器的IP地址.在命令行上它似乎工作正常,但在模板上下文中使用时它不返回任何东西

这是我的设置

在/ srv / pillar我添加了mines.sls并修改了top.sls如下

mines.sls

mine_functions:
  network.ip_addrs: []

top.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() }}

并在resolve.conf中

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

但名字服务员总是空着,有人可以提出建议吗?

您已将接口名称eth1作为第三个参数传递给mine.get,但此参数用于 the matching type you want to have for the first parameter.

将其保留,您将检索IP地址列表.一旦返回值,我就无法将完整的地址列表传递给jinja模板.相反,我在resolv.conf模板中评估了mine.get.

这让我工作:

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 %}

顺便说一句:您还可以选择在本地运行consul代理并将特定于consul的DNS请求转发给您的本地consul代理(这反过来又将其从服务目录中解析出来). Using dnsmasq and Network Manager this might look like this script I uploaded to Github.

网友评论