我试图创建一个模板,它将使用mine.get将DNS作为DNS检索领事服务器的IP地址.在命令行上它似乎工作正常,但在模板上下文中使用时它不返回任何东西 这是我的设置 在/ srv / pillar我添加了m
这是我的设置
在/ 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.