如何在Salt Pillar中追加环境专属值而非覆写已有内容?
解决Salt Pillar追加环境专属密钥的问题
不需要拆分pillar再合并,有更简便的Jinja模板写法可以直接实现追加:
方法1:字符串拼接法
直接通过Jinja字符串拼接原有secrets和新密钥,确保换行正确:
secrets: "{{ salt['pillar.get']('secrets', '') + ('\n' if salt['pillar.get']('secrets') else '') }}dev_secret=value3"
- 如果
common.sls中的secrets已有内容,会自动在末尾添加换行再追加新密钥; - 如果
secrets为空,则直接使用新密钥。
方法2:多行模板渲染法
如果需要保留多行字符串的格式,用Jinja循环遍历原有内容的每一行,再追加新行:
secrets: | {%- for line in salt['pillar.get']('secrets', '').split('\n') %} {{ line }} {%- endfor %} dev_secret=value3
{%- %}用来去除多余的空白字符,避免生成不必要的空行。
原有写法失效的原因
你之前的写法中,多行字符串块里的{{ salt['pillar.get']('secrets', '') }}可能因为模板渲染的空白处理,导致原有内容未正确输出;另外dev_secret前的多余缩进也会干扰最终格式,上述两种方法可以规避这类问题。
内容的提问来源于stack exchange,提问作者apasic
相关产品推荐
相关产品推荐

