假设我在两个不同的环境中拥有不同的凭据,但这是他们之间唯一的不同之处,我不想为单个项目创建额外的支柱文件。
假设我像这样攻击问题:
{%- 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...
这可以按预期工作。但是,测试中的小兵理论上可以获得prod的密码吗?这取决于dict查找是在数据发送到客户端之前还是之后发生的,我想,这又取决于jinja的呈现时间。主设备是先渲染它然后发送结果数据,还是minion按原样接收支柱文件,然后自己渲染它?
答案 0 :(得分:3)
支柱数据始终在主人身上呈现,而不是主人。然而,主人确实可以使用minion的谷物,这就是你的例子有效的原因。
给出具有以下内容的Pillar SLS文件:
test: {{ grains['id'] }}
将产生以下支柱数据:
# salt testminion pillar.item test
testminion:
----------
test:
testminion
资料来源:我是SaltStack核心开发人员。