我使用group_vars中定义的变量获取Jinja2模板文件中变量“env”的值,如:
env: "{{ defined_variable.split('-')[0] }}"
env
可能有三个值abc
,def
,xyz
。
根据这个值,我想使用服务器URL,我在defaults/main.yml
中定义的可能值为:
server_abc: https://xxxx.xxx.com
server_def: https://xxxxx.xxx.com
server_xyz: https://xxxx.xxx.com
在Jinja2模板中,我正在尝试:
{% if 'abc' == "{{env}}" %}
serverURL: '{{ server_abc }}'
{% elif 'def' == "{{env}}" %}
serverURL: '{{ server_def}}'
{% elif 'xyz' == "{{env}}" %}
serverURL: '{{ server_xyz }}'
{% else %}
ServerURL: 'server Url not found'
{% endif %}
然而,即使ServerURL = "server URL not found"
带有env
,abc
或def
的值,也始终定义xyz
。
如果我尝试在Jinja2模板中替换env(硬编码),如下条件确实满足为真:
{% if 'abc' == "abc" %}
serverURL: '{{ server_abc }}'
这意味着我的语法是正确的,但不会评估运行时"{{env}}"
的值。
有什么建议我可以做些什么来解决这个问题?
答案 0 :(得分:9)
您不需要引号和大括号来引用表达式中的变量。正确的语法是:
{% if 'abc' == env %}
serverURL: '{{ server_abc }}'
{% elif 'def' == env %}
serverURL: '{{ server_def }}'
{% elif 'xyz' == env %}
serverURL: '{{ server_xyz }}'
{% else %}
ServerURL: 'server URL not found'
{% endif %}
否则,您需要比较两个字符串,例如abc
和{{env}}
,并且您总是得到否定结果。