Kubernetes helm,Files.Get 和变量
Kubernetes helm, Files.Get and variables
我正在尝试使用 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 }}
我该如何解决这个问题?
像这样 assemble 字符串的常用方法是使用 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 }}
不知何故我偶然发现了这个 post 并且感谢@david maze,我想补充一些东西。那么如果有两个以上的参数并且文件在一个目录中怎么办呢。
我的 use-case 是将 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 }}
data:
config.json: |-
{{ .Files.Get (printf "%s/%s-%s.json" .Values.config_service_dir .Values.service .Values.config_service_version ) | indent 4 }}
我正在尝试使用 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 }}
我该如何解决这个问题?
像这样 assemble 字符串的常用方法是使用 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 }}
不知何故我偶然发现了这个 post 并且感谢@david maze,我想补充一些东西。那么如果有两个以上的参数并且文件在一个目录中怎么办呢。 我的 use-case 是将 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 }}
data:
config.json: |-
{{ .Files.Get (printf "%s/%s-%s.json" .Values.config_service_dir .Values.service .Values.config_service_version ) | indent 4 }}