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 }}
この問題を解決するにはどうすればよいですか?
このように文字列を組み立てる通常の方法は、 Go text/templateprintf
関数を使用することです。それを行う1つの方法は次のとおりです。
{{ printf "%s.krb5.conf" .Values.KRB5_REALM | .Files.Get | indent 4 }}
または、式を括弧で囲むこともできます。
{{ .Files.Get (printf "%s.krb5.conf" .Values.KRB5_REALM) | indent 4 }}
どういうわけか私はこの投稿に出くわしました、そして@david mazeのおかげで、私はいくつかのことを追加したいと思います。したがって、3つ以上の引数があり、ファイルがディレクトリにある場合、その使用方法はどうなりますか。私のユースケースは、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 }}