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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:59:52