Ansible Jinja2 字符串比较
Ansible Jinja2 string comparison
我正在使用 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 %}
然而,即使 env
带有 abc
、def
或 xyz
的值,它总是以定义 ServerURL = "server URL not found"
结束。
如果我尝试在 Jinja2 模板(硬编码)中替换 env,如下条件确实满足:
{% if 'abc' == "abc" %}
serverURL: '{{ server_abc }}'
所以这意味着我的语法是正确的,但 "{{env}}"
在 运行 时的值未被评估。
有什么建议可以解决这个问题吗?
您不需要引号和大括号来引用表达式中的变量。正确的语法是:
{% 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}}
,你总是得到一个否定的结果。
我正在使用 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 %}
然而,即使 env
带有 abc
、def
或 xyz
的值,它总是以定义 ServerURL = "server URL not found"
结束。
如果我尝试在 Jinja2 模板(硬编码)中替换 env,如下条件确实满足:
{% if 'abc' == "abc" %}
serverURL: '{{ server_abc }}'
所以这意味着我的语法是正确的,但 "{{env}}"
在 运行 时的值未被评估。
有什么建议可以解决这个问题吗?
您不需要引号和大括号来引用表达式中的变量。正确的语法是:
{% 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}}
,你总是得到一个否定的结果。