Ansible Jinja2字符串比较

Ruc*_*waj 5 jinja2 ansible ansible-template

我使用group_vars中定义的变量在Jinja2模板文件中获得变量"env"的值,如:

env: "{{ defined_variable.split('-')[0] }}"
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

在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 %}
Run Code Online (Sandbox Code Playgroud)

然而,它总是最终定义,ServerURL = "server URL not found"即使env有价值的abc,defxyz.

如果我尝试在Jinja2模板(硬编码)中替换env,如下所示,条件确实满足为真:

     {% if 'abc'  == "abc" %}
     serverURL: '{{ server_abc }}' 
Run Code Online (Sandbox Code Playgroud)

这意味着我的语法是正确的,但"{{env}}"不评估运行时的值.

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

tec*_*raf 17

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

{% 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 %}
Run Code Online (Sandbox Code Playgroud)

否则,你比较两个字符串,例如abc{{env}}你总是得到阴性结果.