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

Helm模板中如何获取map类型值的所有键生成列表

Helm 模板提取map所有键的实现方案

Helm 模板内置了keys函数,可以直接返回map类型值的所有键组成的列表,不需要额外在Values中维护冗余的键列表,也不用手动遍历拼接。

具体修改方式

  • 直接删除Values.yaml中冗余的environment_names字段,修改后的默认配置如下:
default:
  environments: 
    preview: 
      server: https://sds
      something: adkfgdf
    preview-test:  
      server: https://sds
    staging: 
      server: https://35.246.225.83
  • 模板中通过类型判断兼容两种配置格式:用kindIs判断environments字段的类型,如果是map就用keys提取键列表,如果是列表就直接使用,兜底场景取默认配置下environments的键列表,完全复用同一套循环逻辑。
    修改后的Application模板代码如下:
{{- range $service := $.Values.services }}
{{- $environment_names := list }}
{{- if kindIs "map" $service.environments }}
  {{- $environment_names = keys $service.environments }}
{{- else if kindIs "slice" $service.environments }}
  {{- $environment_names = $service.environments }}
{{- else }}
  {{- /* 无服务级配置时,取默认环境map的所有键 */}}
  {{- $environment_names = keys $.Values.default.environments }}
{{- end }}

{{- range $env_name := $environment_names }}
{{- $environment := get $.Values.default.environments $env_name }}
---
apiVersion: argoproj.io/v1alpha1
kind: Application
debug1: {{ $environment_names }}
debug: {{ $env_name }}
debug2: {{ $service.name }}
{{- end }}
{{- end }}

补充说明

  • keys返回的键列表默认是无序的,如果需要固定遍历顺序,可以在外层套sortAlpha做字母排序,例如keys $service.environments | sortAlpha,就能得到稳定的有序键列表。
  • Go template原生的列表确实是不可变值,append操作会返回新列表而非修改原列表,手动遍历map拼接列表的方案不仅繁琐还容易出错,直接用keys是最简洁的原生实现。
  • 类型判断逻辑可以无缝适配两种Values写法:既支持服务级environments直接写环境名列表,也支持写map结构自动提取键,不需要额外维护冗余字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:54:26