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

如何在Helm伞形Chart中获取子Chart的真实名称(别名场景)

Helm伞形Chart获取带短横线子Chart真实名称的非硬编码方案

问题背景

你的Helm伞形Chart依赖定义了带短横线的子Chart,为了符合YAML规范设置了别名:

dependencies:
  - condition: myTestSubchart.enabled
    name: my-test-subchart
    repository: oci://harbor.test.com/helm
    version: 0.1.0
    alias: myTestSubchart

但使用别名后,调用子Chart的name模板返回的是别名myTestSubchart而非真实名称my-test-subchart,子Chart的默认模板逻辑是优先用nameOverride,否则取.Chart.Name:

{{/*
Expand the name of the chart.
*/}}
{{- define "my-test-subchart.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}

硬编码nameOverride的方案不够灵活,以下是无需覆盖值的解决方案:

解决方案1:直接访问子Chart的.Chart.Name字段

子Chart的.Chart.Name本身就存储着真实名称my-test-subchart,不受别名影响。如果不需要模板里的截断处理,直接使用:

{{ .Subcharts.myTestSubchart.Chart.Name }}

如果需要和原模板一致的截断逻辑,直接复用逻辑即可:

{{ .Subcharts.myTestSubchart.Chart.Name | trunc 63 | trimSuffix "-" }}

解决方案2:封装通用名称模板

在伞形Chart中定义一个通用的子Chart名称模板,逻辑和子Chart的模板一致,但直接基于.Chart.Name(而非依赖子Chart的模板):

{{- define "common.subchart.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}

调用时传入子Chart的上下文:

{{ template "common.subchart.name" .Subcharts.myTestSubchart }}

这个方案既保留了nameOverride的可配置性,又能在未配置时自动获取子Chart的真实名称,不受别名影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:45:46