Kubernetes掌舵,Files.Get和变量

Mag*_*ick 4 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 }}
Run Code Online (Sandbox Code Playgroud)

上面的代码导致错误.

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

{{ .Files.Get .Values.KRB5_REALM".krb5.conf" | indent 4 }}
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

red*_*ack 11

不知怎的,我偶然发现了这篇文章,感谢@david maze,我想添加一些东西。那么如果有两个以上的参数并且文件位于目录中怎么办呢?我的用例是将 json 中的所有配置文件添加到在 helm 目录中创建的名为 config 的单独目录中。这就是我推出它的方式。希望这可以帮助:

value.yaml文件​

config_service_version: v1
config_service_dir: config
service: test

Run Code Online (Sandbox Code Playgroud)

configmap.yaml文件​

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Values.service }}-{{ .Values.config_service_version }}
data:
  config.json: |-
    {{ .Files.Get (printf "%s/%s-%s.json" .Values.config_service_dir .Values.service .Values.config_service_version ) | indent 4 }}

Run Code Online (Sandbox Code Playgroud)


Dav*_*aze 7

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

{{ printf "%s.krb5.conf" .Values.KRB5_REALM | .Files.Get | indent 4 }}
Run Code Online (Sandbox Code Playgroud)

或者您可以将表达式括起来:

{{ .Files.Get (printf "%s.krb5.conf" .Values.KRB5_REALM) | indent 4 }}
Run Code Online (Sandbox Code Playgroud)