我的应用程序中有一些与ip,mac addr,服务器名称等相关的配置值,并且我试图想出一个模块状态,它将与我的支柱中的正确值相匹配一个支柱。我没有找到关于如何在pillar.get中使用grain值的任何信息。
支柱示例:
account:
qa:
server1:
appUsername: 'user2'
appPassword: 'password2'
server2:
appUsername: 'user2'
appPassword: 'password2'
prod:
server3:
appUsername: 'user3'
appPassword: 'password3'
server4:
appUsername: 'user4'
appPassword: 'password4'
我的模板中的行:
keyUser={{ salt['pillar.get']('account:grains['env']:grains['id']:appUsername', 'default_user') }}
keyPass={{ salt['pillar.get']('account:grains['env']:grains['id']:appPassword', 'default_pass') }}
这看起来很自然,但无论我尝试出错,还是会逃避实际的谷物查找并给我默认值。我也无法在谷歌上找到任何东西。有人有解决方案吗?我应该在支柱上动态设置appUsername和appPassword值吗?我喜欢支柱中的布局,因为它是一个非常容易阅读的查找表,没有大量的条件jinja。
答案 0 :(得分:1)
首先,您不能只将grains['env']
嵌入到支柱查找字符串中 - 您需要连接。其次,你的Jinja任务看起来不对。试试这个:
{% set keyUser = pillar.get('account:'~grains['env']~':'~grains['id']~':appUsername', 'default_user') %}
~
是Jinja中的concatenate operator。
此外,salt['pillar.get']('blah')
与pillar.get('blah')
相同。
然而!没有实际错误和/或完整模板,很难确定。