如何在SaltStack状态中使用Jinja与Pillar?修复SLS文件语法错误
修复SaltStack SLS文件的Jinja语法错误
你遇到的语法错误源于Jinja模板的变量使用方式不当,以下是修复后的完整SLS文件:
{% set java_script_path = salt['pillar.get']('script_path', default='/opt/java-app') %} {% if salt['pillar.get']('script_path') %} {% set file = java_script_path ~ '/startup.sh' %} # 修复:Jinja赋值语句内直接用变量,无需{{}},用~做字符串拼接 {% if salt['file.file_exists'](file) %} # 修复:调用salt模块时直接传变量,不需要包裹{{}} cmd.run: - name: mv {{ java_script_path }}/startup.sh {{ java_script_path }}/startup.sh.backup-$(date +'%Y-%m-%d-%H-%M-%S') {% endif %} {% endif %}
关键修复点说明:
- 变量赋值环节:Jinja的
set语句内部直接使用变量名即可,不需要额外用{{}}包裹;字符串拼接用~运算符(相比+更适配可能的空值场景)。 - Salt模块调用环节:
salt['file.file_exists']直接传入变量file即可,无需转成字符串模板形式,Jinja会自动解析变量值。 - 日期格式引号:将原有的转义双引号
"替换为单引号,避免和YAML语法冲突,同时保证shell命令能正确识别日期格式。
内容的提问来源于stack exchange,提问作者boxuan666
相关产品推荐
相关产品推荐

