Saltstack 使用 mine.get 检索 IP 地址
Saltstack retrieve IP address using mine.get
我正在尝试创建一个模板,它将使用 mine.get
检索 consul 服务器的 IP 地址作为 DNS。在命令行上它似乎工作正常,但在模板上下文中使用时它不返回任何东西
这是我的设置
在/srv/pillar中我添加了mines.sls
并修改了top.sls
如下
mines.sls
mine_functions:
network.ip_addrs: []
top.sls
base:
'*':
- mines
刷新支柱并使用 mine.send
和 mine.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 %}
但是名称服务器总是空着,请问有人可以指点一下吗?
您一直将接口名称 eth1
作为第三个参数传递给 mine.get
,但此参数用于 the matching type you want to have for the first parameter。
将其保留,您将检索到 IP 地址列表。一旦这个 returns 值,我就无法将完整的地址列表传递给 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 %}
顺便说一下:您还可以选择 运行 本地的领事代理,并将特定于领事的 DNS 请求转发给您当地的领事代理(反过来从服务目录中解析它们)。 Using dnsmasq
and Network Manager this might look like this script I uploaded to Github。
我正在尝试创建一个模板,它将使用 mine.get
检索 consul 服务器的 IP 地址作为 DNS。在命令行上它似乎工作正常,但在模板上下文中使用时它不返回任何东西
这是我的设置
在/srv/pillar中我添加了mines.sls
并修改了top.sls
如下
mines.sls
mine_functions:
network.ip_addrs: []
top.sls
base:
'*':
- mines
刷新支柱并使用 mine.send
和 mine.update
后,我可以从 saltmaster 服务器查询 consul
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 地址列表。一旦这个 returns 值,我就无法将完整的地址列表传递给 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 %}
顺便说一下:您还可以选择 运行 本地的领事代理,并将特定于领事的 DNS 请求转发给您当地的领事代理(反过来从服务目录中解析它们)。 Using dnsmasq
and Network Manager this might look like this script I uploaded to Github。