如何在Helm Chart中通过range遍历复杂values.yaml生成Manifest
Helm模板化实现方案
你可以通过Helm的range遍历语法批量生成所有应用的资源清单,同时支持跳过标记为禁用的应用,以下是可直接使用的实现:
改造后的模板文件(替换原Sample.yaml内容即可)
{{- range $appKey, $appConfig := .Values.prodapps }} {{- if not $appConfig.disable }} --- apiVersion: v1 kind: Service metadata: name: "{{ $appConfig.name }}-svc" namespace: "{{ $.Release.Namespace }}" spec: ports: - port: 80 name: "http" selector: app: "{{ $appConfig.name }}" {{/* 后续如果需要新增Deployment、Ingress等资源,直接在这个判断块内追加对应模板即可 */}} {{- end }} {{- end }}
关键逻辑说明
range $appKey, $appConfig := .Values.prodapps:遍历Values中prodapps下的所有应用配置,自动适配新增的应用条目,无需修改模板if not $appConfig.disable:自动跳过配置了disable: true的应用,示例中的beta应用会默认不生成对应资源- 变量引用注意事项:进入range循环后作用域会发生变化,要引用根级的全局变量(比如.Release.Namespace)需要加
$.前缀,引用当前应用的配置直接用$appConfig.属性名即可
本地验证方法
执行以下命令可以在本地直接渲染模板,验证输出的Manifest是否符合预期:
helm template <自定义发布名称> <你的Chart目录路径>
内容的提问来源于stack exchange,提问作者praveen
相关产品推荐
相关产品推荐

