【问题标题】:ansible jinja2 - if elseif - use the same linesansible jinja2 - if elseif - 使用相同的行
【发布时间】:2020-11-23 18:40:30
【问题描述】:

在这两种情况下(if,elif),它必须从“start-here”行开始。 两者(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 %}
    

【问题讨论】:

    标签: ansible jinja2


    【解决方案1】:

    如何简化逻辑并使用变量来保存范围的上限?

    例如:

    {%- 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 %}
    

    这将给出:

    • -------------------------------------------
      ROUTER_0
      -------------------------------------------
      -------------------------------------------
      ROUTER_1
      -------------------------------------------
      
      web.web_ports 等于multi-home
    • -------------------------------------------
      ROUTER_0
      -------------------------------------------
      
      web.web_ports 不等于multi-home 时(所以single-home,还有任何其他可能的值)

    【讨论】:

    • 谢谢,这更简单,并且按我的预期工作:) 顺便问一下,{% 和 {%- 有什么区别
    • 任何 Jinja 分隔符上的减号是 whitespace control,它表示应该修剪由 Jinja 创建的空格和换行符
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 2023-04-09
    • 2011-11-01
    相关资源
    最近更新 更多