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