如何检查Helm模板文件是否存在?实际配置场景遇阻
Helm模板文件存在性检查及校验和计算方案
问题场景
公共(lib)Chart目录结构如下:
├── Chart.yaml ├── templates │ ├── _deployment.yaml │ ├── _configmap.yaml
需要计算_configmap.yaml模板的校验和,但当该文件不存在时会触发异常。此前尝试的检查方案未生效,具体情况如下:
无效尝试及问题
尝试通过.Files.Glob判断文件存在性,代码如下:
{{- $configmapexists := .Files.Glob "templates/configmap.yaml" }} {{- if $configmapexists }} test: {{ print $configmapexists }} {{- end }}
返回结果为test: map[],判断逻辑失效;同时尝试.Template.BasePath未找到有效解法,{{ include ("mylibchart.configmap") . | sha256sum }}因configmap位于lib Chart外部也不适用。
正确解决方法
方案1:使用.Files.Exists直接判断
Helm提供.Files.Exists方法可直接检查单个文件是否存在,结合内容读取与校验和计算:
{{- $configmapPath := "templates/_configmap.yaml" }} {{- if .Files.Exists $configmapPath }} configmap-checksum: {{ .Files.Get $configmapPath | sha256sum }} {{- else }} # 文件不存在时的处理逻辑,示例为设置默认值 configmap-checksum: "none" {{- end }}
方案2:修正.Files.Glob的判断逻辑
若需使用Glob匹配,需通过集合长度判断是否匹配到文件,同时注意路径正确性(原代码遗漏文件名前的下划线):
{{- $configmapPath := "templates/_configmap.yaml" }} {{- $matchedFiles := .Files.Glob $configmapPath }} {{- if gt (len $matchedFiles) 0 }} {{- $content := index $matchedFiles $configmapPath }} configmap-checksum: {{ $content | sha256sum }} {{- else }} configmap-checksum: "none" {{- end }}
关键说明
- 原无效尝试的核心问题:路径写错(遗漏文件名前的下划线),且
.Files.Glob返回的空集合在Go模板中会被视为真值,直接if判断无法区分是否存在文件。 .Files.Exists是最直接的单文件存在性判断方法,适用于明确知道文件路径的场景。
内容的提问来源于stack exchange,提问作者Nikolai Bessonov
相关产品推荐
相关产品推荐

