Kubernetes头盔,Files.Get和变量

时间:2018-10-01 00:23:50

标签: kubernetes kubernetes-helm

我正在尝试使用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 }}

如何解决此问题?

2 个答案:

答案 0 :(得分:6)

通常使用Go text/template printf函数来组装这样的字符串。一种方法是:

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

或者您可以在表达式中加上括号:

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

答案 1 :(得分:0)

不知何故,我偶然发现了这篇文章,并感谢@david迷宫,我想补充一些内容。那么,如果有两个以上的参数,并且文件在目录中,该如何使用呢? 我的用例是将json中的所有配置文件添加到在Helm目录中创建的名为config的单独目录中。这就是我推出的方式。 希望这会有所帮助:

values.yaml 文件

config_service_version: v1
config_service_dir: config
service: test

configmap.yaml 文件

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Values.service }}-{{ .Values.config_service_version }}
  #Additional labels to use
  #name: {{ printf "%s-%s" .Release.Name .Chart.Name }}
  #labels:
  #  app: {{ .Chart.Name | trunc 63 | trimSuffix "-" }}
  #  chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
  #  release: {{ .Release.Name }}
  #  heritage: {{ .Release.Service }}
data:
  config.json: |-
    {{ .Files.Get (printf "%s/%s-%s.json" .Values.config_service_dir .Values.service .Values.config_service_version ) | indent 4 }}