盐改变 /etc/hosts,但仍在缓存旧的?

Salt changing /etc/hosts, but still caching old one?

盐缓存/etc/hosts吗? 我处于更改 /etc/hosts 以便 FQDN 指向外部 IP 地址而不是 127.0.0.1

的情况

问题是在第一个 运行 中,fqdn_ipv4 保持为 127.0.0.1,我需要重新 运行 salt '*' state.highstate 以获得正确的值。这会导致像 这样的问题,这让我浪费了很多时间。

salt 是否在执行之前渲染所有内容(或缓存 DNS)?我该如何解决这个问题?

状态文件如下所示:

127.0.0.1:
  host.absent:
    - name:     {{ nodename }}
    - ip:          127.0.0.1

127.0.1.1:
  host.absent:
    - name:     {{ nodename }}
    - ip:          127.0.1.1

{% for minion, items in salt['mine.get']('environment:' + environment, 'grains.item', expr_form='grain')|dictsort %}

{{ minion }}:
  host.present:
    - ip:       {{ items['ip_addr'] }}
    - names:
      - {{ minion }}
      - {{ minion.split('.')[0] }}

{% endfor %}

使用 IP 的代码如下所示:

{% set ipv4     = salt['config.get']('fqdn_ip4') -%}

# IP Address that Agent should listen on
listening_ip={{ ipv4[0] }}

Salt 正在缓存 grains 的值。因此 salt['config.get']('fqdn_ip4') 将从脚本开头检索值。

在您的状态文件中使用以下内容来刷新颗粒信息:

refreshgrains:
  module.run:
    - name: saltutil.sync_grains

Salt 会在执行之前渲染状态,因此您可能无法在状态文件本身中使用任何新的粒度信息。

但是您将能够在文件的 Jinja 模板中使用新的粒度值。我假设第二个代码片段来自 Salt file.managed 使用的模板,所以你在这里应该是安全的。