如何使用jinja/ansible格式化字符串?

如何使用jinja/ansible格式化字符串?,ansible,jinja2,Ansible,Jinja2,朋友们 我在这里学习Ansible,并尝试将我所学的应用到我的一个简单项目中。我在格式化一些字符串时遇到了麻烦。我发现以下错误: fatal: [localhost]: FAILED! => {"changed": false, "msg": "AnsibleError: template error while templating string: **unexpected ']', expected ')'**. String:

朋友们

我在这里学习Ansible,并尝试将我所学的应用到我的一个简单项目中。我在格式化一些字符串时遇到了麻烦。我发现以下错误:

fatal: [localhost]: FAILED! => {"changed": false, "msg": 
"AnsibleError: template error while templating string: 
**unexpected ']', expected ')'**. 

String: 

cluster_name = \"{{ terraform['%s' | format(env)].cluster_name }}\"
\ncredentials = \"{{ terraform['%s' | format(env)].credentials }}\"
\ninitial_node_count = \"{{ terraform['%s' | format(env]].initial_node_count }}
\format(env)].project }}\""}
    ...
这是我的jinja2文件的外观:

cluster_name = "{{ terraform['%s' | format(env)].cluster_name }}"
credentials = "{{ terraform['%s' | format(env)].credentials }}"
initial_node_count = "{{ terraform['%s' | format(env]].initial_node_count }}"
...

我想在运行ansible playbook site.yaml-e env=testing并将其写入文件时生成类似terraform['testing']的字符串。我想不出别的办法来完成这件事。有什么想法吗?

您想使用以下语法:

cluster_name = "{{ terraform[env].cluster_name }}"
使用terraform.env,ansible将获得terraform env的env密钥,但使用terraform[env] ,ansible将把env解析为“testing”,并获取terraform变量的“testing”键。

Q:生成类似terraform['testing']的字符串。凭据

shell>ansible playbook site.yaml-e env=测试 A:下面的剧本

shell>cat site.yml -主机:本地主机 任务: -设定事实: 集群名称:{{begin}{{env}}{{end}} 变量: 开始:地形 结束:']。凭据 -调试: 变量:集群名称 给予

集群名称:terraform['testing']。凭据
请澄清:您是要在生成的文件中写入在您的剧本/环境中设置的变量terraform.testing.cluster_name的值,还是要写入文本字符串terraform['testing'].cluster_name?注意:第一个答案是你想要的,@Richard Sellam已经给出了下面的正确答案。另外,请编辑您的问题并修复错误消息的格式。谢谢。仅出于您的考虑,AFAIK这相当于集群_name:terraform['{{env}}}]。凭据,但没有间接寻址