首页 > 解决方案 > Kubernetes helm、Files.Get 和变量

问题描述

我正在尝试使用 Helm 模板语言动态指定要包含在 configmap.yaml 中的文件的名称。

这是一个例子:

{{- $filename := .Values.KRB5_REALM -}}
apiVersion: v1
data:
  # When the config map is mounted as a volume, these will be created as files.
  krb5.conf: |
{{ .Files.Get $filename".krb5.conf" | indent 4 }}
kind: ConfigMap
metadata:
  name: {{ template "myapp.fullname" . }}
  labels:
    heritage: {{ .Release.Service }}
    release: {{ .Release.Name }}
    chart: {{ .Chart.Name }}-{{ .Chart.Version }}
    app: {{ template "myapp.name" . }}
    environment: {{ .Values.environment }}

上面的代码会导致错误。

我尝试了几种变体,但没有任何成功,例如:

{{ .Files.Get .Values.KRB5_REALM".krb5.conf" | indent 4 }}

我该如何解决这个问题?

标签: kuberneteskubernetes-helm

解决方案


像这样组装字符串的常用方法是使用Go 文本/模板 printf函数。一种方法可能是:

{{ printf "%s.krb5.conf" .Values.KRB5_REALM | .Files.Get | indent 4 }}

或者你可以给表达式加上括号:

{{ .Files.Get (printf "%s.krb5.conf" .Values.KRB5_REALM) | indent 4 }}

推荐阅读