[Helm] サブチャートのvalueをnullで上書きする
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
サブチャートのupdateStrategy
をnull
で上書き
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
-f
で明示的に指定したvaluesにはMergeValues
が使われる
MergeValues は、チャートとそのサブチャートの値をマージするために使用されます。 これは、nil/null 値が保持されるため、Coalescingとは異なります。
値は次のルールを使用して結合されます。
- 上位レベルのチャートの値は、常に下位レベルの依存関係チャートの値をオーバーライドします
- スカラー値と配列は置き換えられ、マップはマージされます
- チャートは、その依存関係にあるすべての値だけでなく、チャートのすべての変数にアクセスできます。
Nils の保持は、Helm アクションまたはビジネス ロジックの初期のプロセスで、後のビジネス ロジックでCoalescingが再度行われるときに備えてプロセスを保持する必要がある場合に役立ちます。
サブチャート含むデフォルトのvalues.yamlで定義されたvaluesにはCoalesceValues
が使われる
coalesceはdest valuesとチャートvaluesを結合し、dest valuesを優先します。
これは CoalesceValues と MergeValues のヘルパー関数です。
merge引数は、これが MergeValues と CoalesceValues のどちらで使用されるかを指定することに注意してください。 Coalescingでは、状況によっては null 値とそのキーが削除されますが、マージでは null 値が保持されます。
Values handling had numerous issues fixed and now consistently has a priority of (1) User specified values (e.g CLI), (2) imported values, (3) parent chart values, and (4) subchart values. Additionally, null can now consistently be used to remove values.
v3.13では逆になってしまった
-f
なし valueが効いている(nullで上書きできている)
helm template . --show-only charts/drupal/templates/deployment.yaml | yq .spec.strategy
null
-f
あり valueが効いてない
helm template . --show-only charts/drupal/templates/deployment.yaml -f values.yaml | yq .spec.strategy
type: RollingUpdate