You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Jinja2实现应用机器列表分组与URL批量关联

Jinja2集群机器与URL配对解决方案

问题背景

已通过Python向Jinja2传入两个列表:

  • app_machine_list:包含14台应用机器,已划分为3个集群(4、4、6台)
  • machine_url_list:包含6个URL,需为每个集群分配2个URL

现有模板已实现集群划分,但未关联URL,期望输出为每台机器对应分配的URL,格式如下:

CLUSTER1
  abcapp01 - scheme://host1.app.local
  abcapp02 - scheme://host1.app.local
  abcapp03 - scheme://host2.app.local
  abcapp04 - scheme://host2.app.local
CLUSTER2
  abcapp05 - scheme://host3.app.local
  abcapp06 - scheme://host3.app.local
  abcapp07 - scheme://host4.app.local
  abcapp08 - scheme://host4.app.local
CLUSTER3
  abcapp09 - scheme://host5.app.local
  abcapp10 - scheme://host5.app.local
  abcapp11 - scheme://host5.app.local
  abcapp12 - scheme://host6.app.local
  abcapp13 - scheme://host6.app.local
  abcapp14 - scheme://host6.app.local

修改后的Jinja2模板

{% set cluster_urls = machine_url_list | batch(2) %}
{% for machine_batch, urls in zip(app_machine_list | batch((app_machine_list | length) // 3), cluster_urls) -%}
CLUSTER{{ loop.index }}
  {% set half = (machine_batch | length + 1) // 2 %}
  {% set url1 = urls[0] %}
  {% set url2 = urls[1] %}
  {%- for machine in machine_batch[:half] %}
  {{ machine }} - {{ url1 }}
  {%- endfor %}
  {%- for machine in machine_batch[half:] %}
  {{ machine }} - {{ url2 }}
  {%- endfor %}
{%- endfor %}

逻辑说明

  1. URL分组:用batch(2)将machine_url_list拆分为3组,每组2个URL,对应3个集群;
  2. 同步遍历:通过zip同时迭代机器集群批次和对应的URL组;
  3. 分配规则:计算half值,确保每个集群的机器按数量平分(若为奇数则多1台分配给第一个URL);
  4. 关联输出:先输出前half台机器与第一个URL的配对,再输出剩余机器与第二个URL的配对。

内容的提问来源于stack exchange,提问作者Mark Kaye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 01:31:21