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 核心开发人员。
假设我在两个不同的环境中有不同的凭据,但这是它们之间唯一的区别,我不想为单个项目制作额外的支柱文件。
假设我这样解决问题:
{%- 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 核心开发人员。