【问题标题】:Configmap indentation does not render properlyConfigmap 缩进无法正确呈现
【发布时间】:2020-11-25 18:02:01
【问题描述】:

我目前正在为 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 结合使用,但不幸的是没有成功。我做错了什么?

【问题讨论】:

  • 可能是由于您正在使用的编辑器。尝试在终端中 cat 文件,看看缩进是否正确
  • 在终端中捕获 configMap 模板文件确实显示正确的缩进,这是您的意思对吗?

标签: kubernetes-helm go-templates


【解决方案1】:

您可以使用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

【讨论】:

  • 谢谢!像您建议的那样使用 nindent 函数确实对我有用。我还注意到您将- 放在模板内的name 键之前,而不是放在包含模板的文件中。在这些情况下通常建议这样做吗?
  • 在我看来,它使模板更具可读性和一致性,并且由于 'nindent' 在字符串的开头添加了一个新行,我不确定模板是否会在不移动 '-' 的情况下成功呈现发挥作用
  • 感谢您的反馈,听起来很明智。我尝试了另一种方式,模板确实渲染成功,但是在这种情况下,-name: {{ $name }} 之间插入了一个换行符。所以这确实是不切实际的。
猜你喜欢
  • 2014-03-19
  • 2015-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
  • 2015-09-27
  • 2021-04-21
相关资源
最近更新 更多