ansible jinja2-如果是elseif-使用相同的行

ansible jinja2-如果是elseif-使用相同的行,ansible,jinja2,Ansible,Jinja2,在这两种情况下(if、elif),它必须从“开始于此处”行开始。 如何从同一行循环/启动两个(if、elseif) if语句有多个端口,将使用相同的配置创建两个不同的配置 elif语句只有一个端口,将使用相同的配置创建一个配置 {% for web in web_servers %} {% if web.web_ports == 'multi-home' %} {% for n in range(0, 2) %} {% elif web.web_ports == 'single-home'

在这两种情况下(if、elif),它必须从“开始于此处”行开始。 如何从同一行循环/启动两个(if、elseif)

  • if语句有多个端口,将使用相同的配置创建两个不同的配置

  • elif语句只有一个端口,将使用相同的配置创建一个配置

    {% for web in web_servers %}
    {% if web.web_ports == 'multi-home' %}
    {% for n in range(0, 2) %}
    {% elif web.web_ports == 'single-home' %}
    {% for n in range(0, 1) %}
    
    *(start-here)*
    -------------------------------------------
    ROUTER_{{ n }}
    -------------------------------------------
    {% for rtr in web['router_'~n] %}
    .
    .
    .
    .
    .
    .
    {% endfor %}
    {% endfor %}
    {% endfor %}
    {% endif %}
    {% endfor %}
    

简化逻辑并使用变量保持范围的上限怎么样

例如:

{%- set max_range = 1 -%}
{%- if web.web_ports == 'multi-home' -%}
  {%- set max_range = 2 -%}
{%- endif -%}
{%- for n in range(0, max_range) -%}
-------------------------------------------
ROUTER_{{ n }}
-------------------------------------------
{#- your other for can still be nested here #}
{% endfor %}
这将提供:

  • -------------------------------------------
    路由器0
    -------------------------------------------
    -------------------------------------------
    路由器1
    -------------------------------------------
    
    web.web\u端口
    等于
    multi-home
  • -------------------------------------------
    路由器0
    -------------------------------------------
    
    web.web\u端口
    不等于
    multi-home
    (因此
    single-home
    ,还包括任何其他可能的值)

谢谢,这比我想象的要简单,并且工作正常:)顺便问一下,{%和{%-任何Jinja分隔符上的负号都是a,它表示Jinja创建的空格和换行符应该被修剪