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

SaltStack - How can I use grain values in pillar.get statement?

我的应用程序中有一些与 ip、mac 地址、服务器名称等相关的配置值,我正试图提出一个将匹配正确值的模块化状态从我的支柱 pillar.get。我没有在 pillar.get 中找到任何关于如何使用粒度值的信息。

支柱示例:

 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') }}

这看起来很自然,但无论我尝试什么都会出错,或者会逃避实际的谷物查找并给我默认值。我在 google 上也找不到任何内容。有人有解决办法吗?我应该在 pillar 上动态设置 appUsername 和 appPassword 值吗?我喜欢 pillar 中的布局,因为它是一个非常容易阅读的查找 table,没有大量的条件 jinja。

首先,您不能只将 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') 相同。

但是!如果没有实际错误,很难确定 and/or 完整模板。