Closed7

[Helm] サブチャートのvalueをnullで上書きする

mikutasmikutas

https://github.com/helm/helm/issues/11737

Chart.yaml

apiVersion: v2
dependencies:
  - name: drupal
    version: 12.5.13
    repository: https://charts.bitnami.com/bitnami
name: mydrupal
type: application
version: 0.1.0

values.yaml

サブチャートのupdateStrategynullで上書き

drupal:
  updateStrategy: null

-f values.yamlを指定するかどうかで結果が変わる

-fなし valueが効いてない

helm template . --show-only charts/drupal/templates/deployment.yaml | yq .spec.strategy
type: RollingUpdate

-fあり valueが効いている

helm template . --show-only charts/drupal/templates/deployment.yaml -f values.yaml | yq .spec.strategy
null

values.yamlはデフォルトで読まれるファイルのはずなのに-fで指定しないと効いていないように見える。なぜ?という話


上記の問題はnullで上書きするときのみで、

values.yamlがこの内容の場合

drupal:
  updateStrategy: Recreate

-fはなくてもvalueは入力されている

helm template . --show-only charts/drupal/templates/deployment.yaml | yq .spec.strategy
Recreate
mikutasmikutas

-fで明示的に指定したvaluesにはMergeValuesが使われる

https://github.com/helm/helm/blob/343389856b080c7f1043bacfc07ff6ac83cc9393/pkg/chartutil/coalesce.go#L53-L67

MergeValues は、チャートとそのサブチャートの値をマージするために使用されます。 これは、nil/null 値が保持されるため、Coalescingとは異なります。

値は次のルールを使用して結合されます。

  • 上位レベルのチャートの値は、常に下位レベルの依存関係チャートの値をオーバーライドします
  • スカラー値と配列は置き換えられ、マップはマージされます
  • チャートは、その依存関係にあるすべての値だけでなく、チャートのすべての変数にアクセスできます。

Nils の保持は、Helm アクションまたはビジネス ロジックの初期のプロセスで、後のビジネス ロジックでCoalescingが再度行われるときに備えてプロセスを保持する必要がある場合に役立ちます。

mikutasmikutas

https://github.com/helm/helm/blob/343389856b080c7f1043bacfc07ff6ac83cc9393/pkg/chartutil/coalesce.go#L92-L99

coalesceはdest valuesとチャートvaluesを結合し、dest valuesを優先します。

これは CoalesceValues と MergeValues のヘルパー関数です。

merge引数は、これが MergeValues と CoalesceValues のどちらで使用されるかを指定することに注意してください。 Coalescingでは、状況によっては null 値とそのキーが削除されますが、マージでは null 値が保持されます。

このスクラップは2023/07/31にクローズされました