【问题标题】:Helm: Extra newline when using "include" for templatingHelm:使用“include”进行模板时的额外换行符
【发布时间】:2018-05-18 10:30:54
【问题描述】:

当我的图表使用{{ 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 之间的新谎言。我想知道这是否会影响我的 pod 的结果,因为安装卷时存在问题,我希望能够在进入另一个兔子洞之前确保这个模板问题是罪魁祸首。

【问题讨论】:

  • 尝试在包含子句中插入破折号

标签: go kubernetes yaml kubernetes-helm


【解决方案1】:

您可以使用连字符来禁止模板命令中的换行符。您已经将它用于defineend

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

【讨论】:

    【解决方案2】:

    当您使用 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
    

    【讨论】:

    • 太棒了,这对我有帮助。似乎提供破折号{{- ... -}}nindent 确实是不够的。
    猜你喜欢
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 2018-11-11
    相关资源
    最近更新 更多