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

如何在Helm中遍历嵌套列表生成指定格式资源?

YAML端点配置格式转换方案

问题背景

给定如下values.yaml配置:

configurations:
  endpoints:
    - firstEndpoint
      - firstPath
      - secondPath
    - secondEndpoint
      - thirdPath
      - fourthPath

需要生成如下结构化资源格式:

- name: firstEndpoint
  paths:
    - firstPath
    - secondPath

- name: secondEndpoint
  paths:
    - thirdPath
    - fourthPath

已知若endpoints为map类型时可直接实现,但当前endpoints是嵌套列表结构,每个端点对应后续的路径列表,该如何转换?

解决方案

首先要明确:原YAML的缩进写法,实际解析后endpoints是一个嵌套列表——每个顶级列表项都是一个子列表,子列表第一个元素是端点名称,剩余元素为对应路径。基于这个结构,可以用以下两种方式实现转换:

1. Helm模板实现(K8s Helm场景)

在Helm模板中通过遍历嵌套列表完成转换:

{{- range $item := .Values.configurations.endpoints }}
- name: {{ index $item 0 }}
  paths:
  {{- range $path := after 1 $item }}
    - {{ $path }}
  {{- end }}
{{- end }}

2. yq命令行实现(通用YAML处理场景)

使用yq(v4版本)工具执行命令直接转换:

yq '.configurations.endpoints[] | {"name": .[0], "paths": .[1:]}' values.yaml

核心逻辑

不管哪种方式,核心都是:

  • 遍历endpoints下的每个子列表;
  • 子列表的第一个元素作为name字段值;
  • 子列表从第二个元素开始的所有内容,作为paths数组的元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:35:30