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