Ansible Jinja2 字符串比较

标签 ansible jinja2 ansible-template

我使用 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 的值, defxyz .

如果我尝试在 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}}你总是得到一个负面的结果。

关于Ansible Jinja2 字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40086613/

相关文章:

Ansible 循环 - 如何将模板值与 with_items 匹配?

ansible - 如何根据条件打破 with_items 循环

redis - Ansible:不同主机的配置文件中相同变量的不同值

docker - Ansible 通过 docker,库存中的 docker host

python - 如何使用 WTForms 呈现我的选择字段?

Ansible local_action 指令

jinja2 - Jinja 模板的 {% spaceless %} 标签?

python - Jinja2 宏导入 "with context"和全局变量 : {% from file. html import macro_name with context %}

Ansible playbook 中的 Mongodb 查找错误

ansible - 使用 Ansible 时如何操作列表中的每个项目?