【问题标题】:saltstack and strange unicode quoting from pillarsaltstack和奇怪的unicode引用来自支柱
【发布时间】:2026-01-24 04:10:01
【问题描述】:

我有一些简单的(ascii)支柱数据,看起来像这样(有些简化):

host:
  name:
    user: 'jeff'
    pass: 'sekret'

在一个 salt (sls) 文件中,我调用一个这样的 jinja 模板:

{% set the_name = pillar.get('host')['name'] %}

/dev/null/myfile:
  file.managed:
    source: myfile_template
    ...
    -defaults:
       stuff: {{ the_name }

myfile_template 中,我指的是{{ stuff.user }}。我被告知stuff 没有“用户”属性。如果我尝试 {{ stuff["user"] }}{{ stuff['user'] }} 也是一样。

在 salt 2018.3.2 中,此代码有效。 在 salt 2019.2.0 中,此代码不起作用,我收到上述错误。

只需将{{ stuff }} 插入文件(使用salt 2019.2.0)即可表示该值为

{u"u'user'": u"u'jeff'", u"u'pass'": u"u'sekret'" }

我很确定双 unicode 指示符是我的问题的标志,但我有点不知所措。 有什么建议我可能做错了什么或发生了什么变化?

【问题讨论】:

    标签: salt-stack


    【解决方案1】:

    正如您所说,它在 2018.3 中有效,而在 2019.2 中无效,您应该查看 https://docs.saltstack.com/en/latest/topics/releases/2019.2.0.html 上提供的 2019.2 发行说明。

    这里https://docs.saltstack.com/en/latest/topics/releases/2019.2.0.html#non-backward-compatible-change-to-yaml-renderer 明确提到了“对 YAML 渲染器的非向后兼容更改”。

    如果您打算仅使用 salt 2019.2,则应将 stuff: {{ the_name}} 更改为 stuff: {{ the_name|tojson }},如果您还打算与旧版本兼容,则应将 stuff: {{ the_name|json }} 更改为。

    【讨论】: