Helm 中包含空模板时如何处理缩进?

问题描述 投票:0回答:1

我有一个命名模板,其中包含值列表。

{{- define "mychart.labels" }}
  {{- $labels := .Values.labels }}
  {{- if $labels }}
    {{- toYaml $labels }}
  {{- end }}
{{- end -}}

我这样包含它

...
labels:
  {{- include "mychart.labels" | nindent 2 }}
annotations:
...

问题是,当没有定义标签时,我会得到一个带有 2 个空格的空行(我将用

_
表示空格)

...
labels:
__
annotations:
...

我想避免这种情况。当标签不存在时,我不想排队。

...
labels:
annotations:
...

我知道可以通过首先使用

if
检查模板是否为空,然后包含它来完成。但是在每个
if
周围使用
include
感觉很麻烦,我觉得一定有一种我不知道的内置方法来处理这个问题。

我想我可以将

nindent
更改为
ident
并在模板开头添加换行符(如果给出
.Values.labels
)。这样,当未给出
.Values.labels
时,不会添加空行。 我尝试重新定义模板如下:

{{- define "mychart.labels" }}
  {{- $labels := .Values.labels }}
  {{- if $labels }}
{{ toYaml $labels }}
  {{- end }}
{{- end -}}

并像这样包含它

...
labels:
  {{- include "mychart.labels" | indent 2 }}
annotations:
...

看起来可行,但我在上一行的末尾有 2 个空格。他们是由

indent
添加的。

...
labels:__
annotations:
...

有什么干净的方法来获得我想要的行为吗?

编辑:这个问题不同于如何删除在 helm 中添加 .toYaml 的新行?即使模板完全为空,我也面临这个问题

{{- define "mychart.labels" -}}
{{- end -}}

所以问题或解决方案不适用于这种情况。

kubernetes-helm go-templates
1个回答
0
投票

在您的模板代码中

labels:
  {{- include "mychart.labels" | nindent 2 }}
annotations:                             #   ^ here

include | nindent
表达式之后有一个无条件换行符。 要删除该换行符,您必须在大括号内放置一个连字符,但请注意,这也会删除下一行上的所有前导空格(是
annotations:
位于
metadata:
块内并且有 2 个前导空格吗? )。 您还需要确保,如果您的辅助模板发出任何内容,它会以换行符结尾。

labels: {{- include "mychart.labels" . | nindent 2 -}}
annotations: ...                                 # ^ add this hyphen

{{- define "mychart.labels" -}}
{{- if .Values.includeFooLabel }}
foo: bar
{{ end -}}  # keep the newline preceding this line
{{- end -}}

我使用的另一种方法是使用

with
语句,它既是一个条件,并且如果条件表达式为真,也会将
.
重新绑定到条件表达式。 您可以使用它来避免重复
include
表达式。 如果我正在写这篇文章,我可能会使用它来避免完全发出
labels:
(如果不使用它)。

{{- with include "mychart.labels" . }}
labels:
{{ . | include 2 }}
{{- end -}}

尝试详细控制这一点往往意味着跟踪换行符和空格的确切位置,以及您在哪里抑制了它们。 您在问题中添加的

_
表明您已经意识到这一点。


一个合理的答案是完全忽略这个问题。 额外的换行符不会改变 YAML 文件的语义,因此只有当有人直接查看

helm template
输出时你才会看到这一点;在这种情况下,您的图表将不会是唯一具有这样的额外换行符的渲染图表。

© www.soinside.com 2019 - 2024. All rights reserved.