如何在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
相关产品推荐
相关产品推荐

