Salt中Jinja模板生成JSON触发state.apply误判变更如何解决
解决方案
Salt 内置的 tojson 过滤器原生支持你需要的两个特性,只需修改 Jinja 模板的输出行即可,无需额外配置:
- 缩进格式化输出:通过
indent参数指定缩进空格数,即可生成多行格式化 JSON,不需要额外做\n替换 - 键名按字母排序:通过
sort_keys=True参数开启自动排序,保证相同数据的 JSON 输出顺序完全一致
修改后的完整 Jinja 模板如下:
{%- import_yaml 'gb-server/defaults.yaml' as defaultmap -%} {%- set secrets = gb_server_config['secrets'] -%} {{ secrets|tojson(indent=2, sort_keys=True) }}
修改后生成的 JSON 格式会和你提到的重配置命令输出格式完全匹配,只要 Pillar 中存储的原始配置没有实际变更,Salt 每次执行 apply.state 生成的文件内容都会完全一致,不会再出现无意义的变更判定,也就不会误触发重配置命令。如果需要调整缩进大小,直接修改 indent 参数的数值即可。
内容的提问来源于stack exchange,提问作者sevillo
相关产品推荐
相关产品推荐

