Jinja2 - 使用变量的值作为另一个变量的键的一部分创建一个动态变量

Jinja2 - create a dynamic variable using value of variable as part of the key of another variable

我正在为 Ansible 角色编写一个 jinja2 模板。我的 role/x/vars/main.yml

里有这个
switches:
  -hostname: foo
   customer: abc
   abc_secret_key: myP@$$word
   xyz_secret_key: myS3cr3t

在我的模板中,我想根据客户变量的值引用密钥。

我可以使用 {{ item.abc_secret_key }} 引用 abc_secret_key。那行得通,没问题。但是我真的想动态构建变量名并使用“客户”变量的值(在 abc 的情况下)作为变量名 abc_secret_key.

的一部分

这不起作用。
我得到

"msg": "AnsibleUndefinedVariable: 'dict object' has no attribute u'abc'"

但是,希望它能说明我正在尝试做的事情

my secret key is {{ item[item.customer]['_secret_key'] }}

我希望它呈现如下:

my secret key is myP@$$word

我尝试了大约 10-15 种不同的演绎版,但无法确定正确的语法。

正如您看到的带有文字字符串键的字典键查找,您可以组成一个动态字符串作为字典键:

- debug:
    msg: my secret key is {{ item[ item.customer ~ '_secret_key'] }}

其中 ~ 是用于字符串连接的 jinja2 语法,其中任何一方首先被强制转换为字符串,然后连接。也欢迎您使用 +,如果您确定双方都是 already 字符串(这里很可能是这种情况,基于您引用的示例):

- debug:
    msg: my secret key is {{ item[ item.customer + '_secret_key'] }}