我有一个使用file.managed
的状态,它通过jinja生成一个配置文件,用于从支柱中的键循环。
我的支柱看起来像这样:
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''] }}'] %}
目标是在添加新服务器时通常仅将必要的更改限制为相应的支柱文件,因此也欢迎其他建议。
答案 0 :(得分:2)
我认为您应该在州档案中使用支柱信息 你的州档如吼:
{% 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 -%}
我希望这能解决你的问题,谢谢。