web-dev-qa-db-ja.com

ヘルムチャートでのカスタム関数の記述

Helmデプロイメントyamlファイルに次のスニペットがあります。

{{if or .Values.ha.enabled .Values.checkpointing.enable_checkpointing .Values.enable_upgrade_hook}}
{{if eq .Values.pvc.file_prefix "file://"}}
- mountPath: {{ .Values.pvc.shared_storage_path }}/{{ template "fullname" . }}
  name: shared-pvc
{{end}}
{{end}}

これらすべてのifチェックをカスタム関数に入れて、ここで関数を呼び出したいと思います。関数を使用した新しいスニペットは次のようになります。

{{if eq enable_mount_volume "true"}}
- mountPath: {{ .Values.pvc.shared_storage_path }}/{{ template "fullname" . }}
  name: shared-pvc
{{end}}

どうすればこれを達成できますか?複数のデプロイyamlファイルがあり、それぞれがこの条件付きチェックを実行している可能性があります。各yamlファイルをチェックインする場合は、ロジックを多用するのではなく、関数を呼び出すだけで便利です(エラーが発生しにくくするため)。

また、この関数をすべてのテンプレートファイルで定義したくはありません。それは、目的を損なうからです。

5
James Isaac

部分テンプレート 名前付きconditional-mountを、アンダースコアで始まるファイルに作成できます。たとえば、templates/_conditional-mount.tpl

{{define "conditional-mount"}}
{{if or .Values.ha.enabled .Values.checkpointing.enable_checkpointing .Values.enable_upgrade_hook}}
{{if eq .thisPvc.file_prefix "file://"}}
- mountPath: {{ .thisPvc.shared_storage_path }}/{{ template "fullname" . }}
  name: shared-pvc
{{end}}
{{end}}
{{end}}

そして、次の方法で必要な場所で使用できます。

{{include "conditional-mount" (dict "Values" .Values "thisPvc" .Values.pvc)}}

ここでの秘訣は、スコープオブジェクトを介してマウントするpvcを指定することですthisPvc。Values.pvcを指します。 Sprig dict関数 が使用されます。次に、別のPVCに対して呼び出すことができます(例:.Values.pvcXYZ

{{include "conditional-mount" (dict "Values" .Values "thisPvc" .Values.pvcXYZ)}}
1
Maxwell

あなたは見つけるかもしれません {{template "foo"}}または{{block "foo"}} 膨大な数の「もしも」に応じて、あなたが望むことをします。

helm docs その問題の周りにlotの単語がもっとあります。これは明らかにそれを考慮しているので素晴らしいことであり、悲しいことです。なんてたくさんの言葉だから。

0
mdaniel