Helm中包含空模板时如何处理缩进问题?
解决Helm模板引用时的空行与多余空格问题
问题背景
我定义了一个用于输出标签列表的命名模板:
{{- define "mychart.labels" }} {{- $labels := .Values.labels }} {{- if $labels }} {{- toYaml $labels }} {{- end }} {{- end -}}
引用方式如下:
... labels: {{- include "mychart.labels" | nindent 2 }} annotations: ...
当.Values.labels未定义时,labels:下方会出现一行带2个空格的空行(用_代表空格):
... labels: __ annotations: ...
我希望在标签不存在时,labels:后直接紧跟annotations:,不要空行:
... labels: annotations: ...
我尝试过修改模板,把nindent换成indent并调整换行:
{{- define "mychart.labels" }} {{- $labels := .Values.labels }} {{- if $labels }} {{ toYaml $labels }} {{- end }} {{- end -}}
引用方式改为:
... labels: {{- include "mychart.labels" | indent 2 }} annotations: ...
但这会导致labels:行末尾多出2个空格:
... labels:__ annotations: ...
简洁解决方案
方案1:将缩进逻辑嵌入模板
修改模板,让它在有标签内容时直接输出带正确缩进的格式,无内容时输出空字符串:
{{- define "mychart.labels" -}} {{- with .Values.labels -}} {{ toYaml . | nindent 2 }} {{- end -}} {{- end -}}
引用时无需额外处理缩进,直接调用:
... labels: {{ include "mychart.labels" . }} annotations: ...
- 当
.Values.labels存在时,模板输出已缩进2个空格的YAML内容,自动换行; - 当不存在时,模板输出空,
labels:后无多余内容,直接衔接下一行。
方案2:在引用时过滤空内容
保留原有模板,在引用时通过trim过滤空内容,再用with判断是否输出缩进后的内容:
... labels: {{- with include "mychart.labels" . | trim -}} {{- . | nindent 2 }} {{- end }} annotations: ...
trim会去掉模板输出的空白字符,确保空内容被识别;with仅在内容非空时执行缩进输出,避免空行和多余空格。
内容的提问来源于stack exchange,提问作者Accercine
相关产品推荐
相关产品推荐

