Helm:使用“include”进行模板化时的额外换行

时间:2017-12-04 21:21:23

标签: go kubernetes yaml kubernetes-helm

当我的图表使用{{ include }}从另一个文件呈现模板时,我得到了一个奇怪的新行。例如,我的清单看起来像这样

      containers:
      - name: {{ .Release.Name }}
        image: {{ .Values.global.image}}:{{ .Values.global.imageTag }}
        imagePullPolicy: {{ .Values.global.pullPolicy }}
        ports:
          - containerPort: {{ .Values.gloabl.containerPort }}
{{ include "common_deployment" . }}

我的common_deployment定义为

{{- define "common_deployment" }}
        envFrom:
          - secretRef:
              name: {{ .Release.Name }}-secret
{{- end -}}

当我在Helm上进行干运行后查看我的清单时,我的模板看起来像这样

 containers:
  - name: test
    image: myrepo/myimage:latest
    imagePullPolicy: Always
    ports:
      - containerPort: 4444

envFrom:
  - secretRef:
      name: test-secret

请注意portsenvFrom之间的新谎言。我想知道这是否会影响我的播放器将如何生效,因为正在安装卷的问题,我希望能够确保这个模板问题是另一个兔子洞之前的罪魁祸首。

2 个答案:

答案 0 :(得分:2)

您可以使用连字符来抑制模板命令上的换行符。您已将其用于defineend

同样,您应该使用{{- include ... -}}

答案 1 :(得分:0)

当您将 include 函数与 indent 函数一起使用以缩进模板时,需要考虑一件事,如下所示:

{{- include "common_deployment" . | indent 4 }}

上述命令还将 include 引入的前导换行符缩进 4 个空格,因此输出结果如下(空格表示为 $):

    ports:
      - containerPort: 4444$$$$\n
$$$$envFrom:
$$$$  - secretRef:
$$$$      name: test-secret

这不会破坏 YAML 语法,因为无论如何都会忽略空格,但它可能会被报告,例如在 diff 输出中。

为了防止这种情况,您可以使用 trim 函数修剪由 include 生成的前导换行符,并使用 nindent 函数,如下所示:

{{- include "common_deployment" . | trim | nindent 4 }}

现在,只有模板的实际行被缩进,换行符由 nindent 函数插入:

    ports:
      - containerPort: 4444\n
$$$$envFrom:
$$$$  - secretRef:
$$$$      name: test-secret