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

如何在Helm Chart中按条件忽略指定模板?跳过特定前缀资源部署

Helm按条件过滤模板资源的实现方案

先修正你的Helper函数

你当前的statement.resource函数存在几个问题:循环内直接输出列表、未处理非x场景、路径判断逻辑不准确。以下是修正后的版本:

{{- define "statement.resource" -}}
{{- $statementProvider := lower $.Values.statementProvider -}}
{{- $statementFiles := list -}}
{{- // 匹配templates下所有yaml格式的模板文件
{{- range $path, $bytes := .Files.Glob "templates/**.yaml" }}
    {{- $fileName := base $path -}}
    {{- if eq $statementProvider "x" }}
        {{- // 跳过文件名以y或z开头的模板
        {{- if not (or (hasPrefix $fileName "y") (hasPrefix $fileName "z")) }}
            {{- $statementFiles = append $statementFiles $path -}}
        {{- end }}
    {{- else }}
        {{- // 非x场景下保留所有模板
        {{- $statementFiles = append $statementFiles $path -}}
    {{- end }}
{{- end }}
{{- // 将最终列表转为JSON字符串,方便后续解析调用
{{- toJson $statementFiles -}}
{{- end }}

如何使用这个Helper函数

Helm默认会自动渲染templates/下所有不以_开头的文件,要实现条件过滤,需要调整模板文件的组织方式:

  1. 重命名现有模板文件:把所有需要条件控制的模板文件前缀加上_,比如y-deployment.yaml改成_y-deployment.yaml,z-service.yaml改成_z-service.yaml。这样Helm不会自动渲染这些文件,而是作为模板片段等待调用。

  2. 创建主渲染入口:在templates/下新建resources.yaml文件,内容如下:

{{- // 调用Helper函数获取符合条件的模板列表
{{- $targetFiles := include "statement.resource" . | fromJson -}}
{{- // 逐个渲染选中的模板
{{- range $file := $targetFiles }}
    {{- include $file . }}
{{- end }}

逻辑验证

  • 当values.yaml中配置statementProvider: x时,所有文件名以y/z开头的模板会被跳过,不会生成K8s资源;
  • 当statementProvider为其他值时,所有模板都会被渲染并发送给K8s。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:17:35