web-dev-qa-db-ja.com

Kubernetesヘルム、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 }}

この問題を解決するにはどうすればよいですか?

4
Magick

このように文字列を組み立てる通常の方法は、 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 }}
7
David Maze

どういうわけか私はこの投稿に出くわしました、そして@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 }}

0
redzack