首页 > 解决方案 > Ansible jinja - 如果循环最后没有换行符

问题描述

我在使用 ansible jinja 模板时遇到问题。基本上我只需要列出 server_name 是更易读的格式。

这是我在 groups/all.yml 中定义的变量

server_name:
  - domain1.mydomain.com
  - domain2.mydomain.com
  - domain3.mydomain.com
  - domain4.mydomain.com

这是我的 myvhost.conf.j2 模板

server_name     {% for name in server_name -%}
                  {{ name }}
                {% if loop.last -%};{%- endif -%}{% endfor %}

结果是:

server_name     domain1.mydomain.com
                domain2.mydomain.com
                domain3.mydomain.com
                domain4.mydomain.com
                ;

预期输出:

server_name     domain1.mydomain.com
                domain2.mydomain.com
                domain3.mydomain.com
                domain4.mydomain.com;

我已经尝试了几种带有空格控制或缩进的模板组合,但它弄乱了结果。请善意指教

标签: ansiblejinja2ansible-2.x

解决方案


您想打印一个换行符后跟 16 个空格,或者 ;在变量值之后打印,因此这是 if-else 语句的自然要求:

server_name     {% for name in server_name -%}
                  {{ name }}
                {%- if not loop.last %}

                {% else %};{% endif %}{% endfor %}

推荐阅读