【发布时间】:2021-10-14 07:49:31
【问题描述】:
我在 salt 中有一个 jinja 模板,每次运行 apply.state 时,salt 都会认为它已经改变,而实际上它没有改变。
问题是当文件“更改”时会执行重新配置命令,并且此重新配置会将文件从单行 JSON 更改为行 JSON。例如:
salt 创建文件如下:
{ "key1": { "sub-key1": "sub-value1", "sub-key2": "sub-value2"}, "key2": "value2" }
但是当重新配置命令执行时,它会将文件更改为:
{
"key1": {
"sub-key1": "sub-value1",
"sub-key2": "sub-value2"
},
"key2": "value2"
}
有没有办法让 salt 开始将文件创建为格式化的 JSON?
这就是我所拥有的:
{{ gb_server.secrets_file }}:
file.managed:
- source: {{ gb_server.secrets_tmpl }}
- user: {{ gb_server.secure_user }}
- group: {{ gb_server.secure_user }}
- mode: 600
- template: jinja
模板如下:
{%- import_yaml 'gb-server/defaults.yaml' as defaultmap -%}
{%- set secrets = gb_server_config['secrets'] -%}
{{ secrets|tojson|replace('\\\\n','\\n') }}
这些值在 yaml 格式的支柱中。
理想情况下,生成的 JSON 将按字母顺序对其键进行排序,这样生成文件的内容就不会“改变”,并且重新配置命令不会每次都运行。
有没有办法用盐做到这一点?
谢谢。
【问题讨论】:
-
根据 saltstack 文档
tojson作为 jinja2 implementation 可以传递一些额外的格式参数。
标签: json yaml jinja2 salt-stack