web-dev-qa-db-ja.com

オプションのネストされた変数をヘルムする

値ファイルでオプションのブロックを作成し、テンプレートでそれを参照するにはどうすればよいですか?

たとえば、次のような値のファイルがあるとします。

# values.yaml
foo:
   bar: "something"

そして、私はこのようなヘルムテンプレートを持っています:

{{ .Values.foo.bar }}

値ファイルのfoo.barをオプションにしたい場合はどうなりますか? fooキーが値に存在しない場合、エラーが発生します。

If条件付きとして追加してみました。ただし、fooキーがない場合は、これでも失敗します。

{{ if .Values.foo.bar }}
{{ .Values.foo.bar }}
{{ end }}

どんな考えでも大歓迎です。

4
Joe J

私はこの同じ質問に対する答えを探して回りましたが、そこには何も見つかりませんでした。カスタム関数を使用する必要があるようですので、私はそれを書きました。これが私が思いついたものです。それは私のユースケースで機能し、フィードバック/改善は大歓迎です。

_helpers.tpl

{{- define "hasDeepKey" -}}
  {{- $mapToCheck := index . "mapToCheck" -}}
  {{- $keyToFind := index . "keyToFind" -}}
  {{- $keySet := (splitList "." $keyToFind) -}}
  {{- $firstKey := first $keySet -}}
  {{- if index $mapToCheck $firstKey -}}{{*/ The key was found */}}
    {{- if eq 1 (len $keySet) -}}{{*/ The final key in the set implies we're done */}}
true
    {{- else }}{{*/ More keys to check, recurse */}}
      {{- include "hasDeepKey" (dict "mapToCheck" (index $mapToCheck $firstKey) "keyToFind" (join "." (rest $keySet))) }}
    {{- end }}
  {{- else }}{{/* The key was not found */}}
false
  {{- end }}
{{- end }}

values.yaml:

    {{- if eq "true" (include "hasDeepKey" (dict "mapToCheck" .Values "keyToFind" "foo.bar")) }}
      bar: {{- .Values.foo.bar }}
    {{- end }}
0
Samuel