ansible - ansible jinja2 - if elseif - 使用相同的行
问题描述
在这两种情况下(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 %}
解决方案
简化逻辑并使用变量来保持范围的上限怎么样?
例如:
{%- 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
,但也有任何其他可能的值)
推荐阅读
- excel - 无法使用 VBA 更改单元格日期格式
- mongodb - 在 mongodb 中聚合嵌套数组
- java - Aspose:使用 USE_DESTINATION_STYLES 的 InsertDocument 不起作用
- java - Selenium 获取传输数据的大小(资源大小)
- excel - 如何将行剪切到另一张纸上,然后在没有循环冻结的情况下删除 + 移动下一行?
- python - 如何使用python修改JSON文件中的多个值
- javascript - 将对象数组映射到新组中
- python - 如何计算 csv 列中的元素数并根据该计数返回另一列中的元素?
- java - 不同线路上的多个系统输入连接在一起。爪哇
- mongodb - 使用批量写入 API 时出现 CodecConfigurationException