在 saltstack 管理文件中查询支柱时包括谷物数据

including grain data when querying pillar in saltstack managed file

我有一个使用 file.managed 的状态,它通过 jinja for 循环从 pillar 中的一个键生成一个配置文件。

我的柱子是这样的:

configuration:
  server01:
    key1: value1
    key2: value2
  server02:
    key03: value03
    key04: value04

和托管文件:

{% set kv = pillar['configuration']['server01'] %}
{% for key, value in kv.iteritems() %}
{{ key }}:{ value }};
{% endfor %}

我现在在状态文件中区分不同服务器的方式是

config:
  file.managed:
    - name: /etc/config.conf
    - source: salt://files/{{ grains['id'] }}.conf.jinja
    - template: jinja

但这不太理想,因为我必须为每个服务器创建一个几乎相同的文件。

有没有办法用实际服务器的ID动态替换server01,比如

{% set kv = pillar['configuration']['{{ grains[id''] }}'] %}

目标是在添加新服务器时通常将必要的更改仅限于相应的支柱文件,因此也欢迎其他建议。

我认为你应该在你的状态文件中使用支柱信息。
您的状态文件如下所示:

{% if grains['id'] in pillar['configuration'] %}
{% set nodeinfo = pillar['configuration'][grains['id']] %}
config:
  file.managed:
    - name: /etc/config.conf
    - source: salt://conf.jinja
    - template: jinja
    - defaults :
      nodeinfo: {{nodeinfo}}
{% endif %}

然后,conf.jinja:

{% for key, value in nodeinfo.iteritems() -%}
{{ key }}:{{ value }};
{% endfor -%}

希望能解决你的问题,谢谢