Configmap 缩进无法正确呈现

Configmap indentation does not render properly

我目前正在为 Kubernetes Cronjob 构建通用图表。我有以下模板函数来包含一个 configMap:

{{- define "cronjob.volume.configMap" -}}
        {{- $name := index . 0 -}}
        {{- $configMapName := index . 1 -}}

        name: {{ $name }}
        configMap:
            name: {{ $configMapName }}
{{- end -}}

我将此模板包含在这样的图表中:

spec:
  jobTemplate:
    spec:
      template:
        spec:
        {{- if .Values.configs }}
          volumes:
          - {{ include "cronjob.volume.configMap" (list "config" "cronjob-config") }}
        {{- end }}

我的 values.yaml 看起来像这样:

configs:
  test-config: |-
    test-config-string

当 运行 helm template 时,我希望结果如下:

spec:
  jobTemplate:
    spec:
      template:
        spec:
          volumes:
          - name: config
            configMap:
                name: cronjob-config

然而,生成的结果是这样的:

spec:
  jobTemplate:
    spec:
      template:
        spec:
          volumes:
          - name: config
        configMap:
            name: cronjob-config

我的模板的第一行有适当的缩进,但是第二行和第三行的缩进级别与 volumes 相同,就在 spec.jobTemplate.spec.template.spec 下方。我曾尝试将 include 而不是 templateindent 结合使用,但不幸的是没有成功。我做错了什么?

您可以使用 nindent 函数并从辅助函数中删除缩进:

_helpers.tpl

{{ define "cronjob.volume.configMap" }}
{{- $name := index . 0 -}}
{{- $configMapName := index . 1 -}}
- name: {{ $name }}
  configMap:
    name: {{ $configMapName }}
{{- end -}}

cronjob.yaml

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
        {{- if .Values.configs }}
          volumes:
          {{- include "cronjob.volume.configMap" (list "config" "cronjob-config") | nindent 10 }}
        {{- end }}
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure
➜ helm template .
---
# Source: achart/templates/cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          volumes:
          - name: config
            configMap:
              name: cronjob-config
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure