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



我正在为Ansible角色编写一个jinja2模板。我在角色/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"没有属性u‘abc‘">

但是,希望它能说明我正在尝试做什么

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

我希望它呈现为这样:

my secret key is myP@$$word

我已经尝试了大约10-15种不同的格式,但无法确定正确的语法。

当您看到使用文本字符串键查找dict键时,您可以组成一个动态字符串作为dict键:

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

其中,~是用于字符串连接的jinja2语法,其中任意一侧首先被强制为字符串,然后进行连接。如果您确定两边都是已经的字符串,也欢迎您使用+(这里可能是这样的情况,基于您引用的示例(:

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

相关内容

  • 没有找到相关文章

最新更新