SaltStack - 如何在pillar.get语句中使用grain值?

时间:2016-05-10 23:38:30

标签: salt-stack

我的应用程序中有一些与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。

1 个答案:

答案 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')相同。

然而!没有实际错误和/或完整模板,很难确定。