【问题标题】:Jinja2 template variables to one lineJinja2模板变量到一行
【发布时间】:2016-10-30 19:49:05
【问题描述】:

是否可以创建一个将变量放在一行的 jinja2 模板?像这样的东西,但不是在结果中有两行,而是用逗号分隔。

模板:

{% for host in groups['tag_Function_logdb'] %}
elasticsearch_discovery_zen_ping_unicast_hosts = {{ host }}:9300
{% endfor %}

结果:

elasticsearch_discovery_zen_ping_unicast_hosts = 1.1.1.1:9300
elasticsearch_discovery_zen_ping_unicast_hosts = 2.2.2.2:9300

期望的结果:

elasticsearch_discovery_zen_ping_unicast_hosts = 1.1.1.1:9300,2.2.2.2:9300

编辑,这适用于 2 个项目,以下更好的解决方案:

elasticsearch_discovery_zen_ping_unicast_hosts = {% for host in groups['tag_Function_logdb']  %}
{{ host }}:9300
{%- if loop.first %},{% endif %}
{% endfor %}

【问题讨论】:

标签: ansible jinja2


【解决方案1】:

这是对我有用的解决方案。我发现 tweeks200 的解决方案只适用于 2 个循环。无论循环的数量如何,这都有效。在此感谢大家的帮助。

elasticsearch_discovery_zen_ping_unicast_hosts={% for host in groups['tag_Function_logdb']  %}
{{ host }}:9300
{%- if not loop.last %},{% endif %}
{% endfor %}

【讨论】:

    【解决方案2】:

    通过将我想要的指令放在循环之前,然后使用loop.first- 空格控件来正确格式化逗号分隔列表,我能够得到这个工作。

    elasticsearch_discovery_zen_ping_unicast_hosts = {% for host in groups['tag_Function_logdb']  %}
    {{ host }}:9300
    {%- if loop.first %},{% endif %}
    {% endfor %}
    

    【讨论】:

    • 检查应该是if not loop.last 否则它将不适用于大于2个元素的循环。
    【解决方案3】:

    你可以这样做:

    elasticsearch_discovery_zen_ping_unicast_hosts =  
    
     {% for host in groups['tag_Function_logdb']  %}
    
        {{ host }}:9300
    
        {% if not groups['tag_Function_logdb'].last %}
    , 
        {% endif %}
    
    {% endfor %}
    

    【讨论】:

    • 谢谢,取得了一些进展。 elasticsearch_discovery_zen_ping_unicast_hosts =   没有被填充,而只是显示为文本。这应该以某种方式成为循环的一部分吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 2020-02-11
    • 2014-06-27
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多