神社模板中的 Ansible 换行符

Ansible newline in jinja template

我正在尝试使用 Ansible 创建 docker-compose 配置。我为此使用 Jinja2 模板。

这是 jinja 模板代码的一部分:

    image: {% if version == "4.2" %}appname:4.2.0{% elif version == "4.0.5" %}dockerhub2:10000/appname:4.0.5{% else %}dockerhub2:10000/appname3:3.0.14{%  endif %}
    container_name: {{ dir }}

我希望看到的:

    image: dockerhub2:10000/appname3:3.0.14
    container_name: name

我真正看到的:

    image: dockerhub2:10000/appname3:3.0.14    container_name: name

如何在此处描述换行符?

endif 放在下一行。引用自 Whitespace Control

"a single trailing newline is stripped if present"

    image: {% if version == "4.2" %}appname:4.2.0{% elif version == "4.0.5" %}dockerhub2:10000/appname:4.0.5{% else %}dockerhub2:10000/appname3:3.0.14
{%  endif %}
    container_name: {{ dir }}

FWIW,您可以简化模板(并使案例也易于扩展)

    image: {{ image[ver] }}
    container_name: {{ dir }}

如果将数据放入字典

    image:
      '4.2': 'appname:4.2.0'
      '4.0.5': 'dockerhub2:10000/appname:4.0.5'
      default: 'dockerhub2:10000/appname3:3.0.14'
    ver: "{{ (version in image.keys())|ternary(version, 'default') }}"

信用@mdaniel;下面的模板给出了相同的结果

    image: {{ image.get(version, image.get('default')) }}
    container_name: {{ dir }}