🐋
HELM の if は 短絡評価されない
{{- if and .Values.test1 .Values.test1.test2 }}
と書いたとき
C++ など多くの言語では 1 つ目の文の評価(ここでいうと .Values.test1
)が false の場合、2 つ目の文の評価はされない。
2 つ目の評価が true/false のどちらであれ、全体として false になることが決定するからである。これを短絡評価と言う。
HELM の場合、この短絡評価が行われない。
例えば、Values.yaml に以下を渡す。
test3:
test4: "testtest"
このとき、期待としては .Values.test1
の値は false になるため、全体として false になってほしいのだが、実際は以下のようなエラーがでる。
<.Values.test1.test2>: nil pointer evaluating interface {}.test2
2 つ目の文も評価され、nil の要素にtest2
は存在しないというエラーになる。
現状、回避策として 2 回に if を分けて運用しているが、他に良い案があれば教えて下さい。。
{{- if .Values.test1 }}
{{- if .Values.test1.test2 }}
Discussion