Jinja in pillars 是在发送给 minion 之前还是之后渲染的?

Is Jinja in pillars rendered before or after it's sent to the minion?

假设我在两个不同的环境中有不同的凭据,但这是它们之间唯一的区别,我不想为单个项目制作额外的支柱文件。

假设我这样解决问题:

{%- set deployment = grains.get('deployment') %}
{%- load_yaml as credentials %}
prod: prodpassword
test: testpassword
dev:  devpassword
{%- endload %}

some_app:
  user: someuser
  password: {{ credentials[deployment] }}

  ...more configuration here...

这按预期工作。但是 test 中的 minion 理论上可以获取 prod 的密码吗?我认为,这取决于 dict 查找是在数据发送到客户端之前还是之后发生,而这又取决于 jinja 何时呈现。 master 是先渲染它然后发送结果数据,还是 minion 按原样接收 pillar 文件,然后自己渲染它?

Pillar 数据总是 在 master 上呈现,从不在 minion 上呈现。然而,master 确实可以访问 minion 的 grains,这就是你的示例有效的原因。

给定一个包含以下内容的 Pillar SLS 文件:

test: {{ grains['id'] }}

将产生以下支柱数据:

# salt testminion pillar.item test
testminion:
    ----------
    test:
        testminion

资料来源:我是 SaltStack 核心开发人员。