继承的Helm Chart中如何让基础Chart资源使用子Chart的Chart.Name变量
方案1:使用内置上下文对象直接读取父/顶层Chart名称(无需额外传参)
直接修改基础Chart的模板逻辑即可,兼容基础Chart单独部署、作为依赖被引入两种场景:
# base/templates/base.yaml apiVersion: secrets-store.csi.x-k8s.io/v1alpha1 kind: SecretProviderClass metadata: # 仅获取直接父Chart名称 name: {{ if .Parent }}{{ .Parent.Chart.Name }}{{ else }}{{ .Chart.Name }}{{ end }}
如果存在多层依赖,希望基础Chart始终使用最顶层主Chart的名称,可以直接用.Root对象简化写法:
name: {{ .Root.Chart.Name }}
原理:Helm中每个Chart的模板上下文独立,.Parent指向直接父Chart的上下文,.Root指向最顶层主Chart的上下文,二者都可以直接读取对应Chart的Chart.yaml配置。
方案2:通过values传参实现自定义控制(灵活度更高)
如果后续需要自定义资源名称前缀,不强制绑定Chart名称,可以用传参方式实现:
- 先修改基础Chart模板,预留参数入口:
# base/templates/base.yaml apiVersion: secrets-store.csi.x-k8s.io/v1alpha1 kind: SecretProviderClass metadata: name: {{ .Values.commonName | default .Chart.Name }}
- 在父Chart(sub1)的
values.yaml中给基础Chart传递参数即可:
# sub1/values.yaml # 依赖的基础Chart参数配置,key为基础Chart的名称 base: commonName: {{ .Chart.Name }}
两种方案渲染后都可以实现基础Chart的资源名称使用父Chart名称sub1的效果。
内容的提问来源于stack exchange,提问作者Matthias M
相关产品推荐
相关产品推荐

