我正在为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'] }}