【问题标题】:Saltstack retrieve IP address using mine.getSaltstack 使用 mine.get 检索 IP 地址
【发布时间】:2015-11-24 07:17:12
【问题描述】:

我正在尝试创建一个模板,它将使用mine.get 检索领事服务器的 IP 地址作为 DNS。在命令行上它似乎工作正常,但在模板上下文中使用时它不返回任何内容

这是我的设置

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

mines.sls

mine_functions:
  network.ip_addrs: []

top.sls

base:
  '*':
    - mines

刷新柱子并使用mine.sendmine.update后,我可以从saltmaster服务器查询consul的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 %}

但是域名服务器总是空着,有人可以建议吗?

【问题讨论】:

    标签: salt-stack


    【解决方案1】:

    您一直将接口名称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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-10
      • 2013-09-13
      • 2020-05-31
      • 1970-01-01
      • 2014-03-04
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多