14

我使用 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}}"运行时的值没有被评估。

有什么建议我可以做些什么来解决这个问题?

4

1 回答 1

39

您不需要引号和大括号来引用表达式中的变量。正确的语法是:

{% 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}}您总是得到否定的结果。

于 2016-10-17T13:03:59.933 回答