如何将“false”值传递给Helm“default”?

scu*_*bbo 4 kubernetes-helm

我在 Helm 图表(例如)中经常看到的一种模式是将布尔值设置为默认true,除非提供了一些覆盖值:

feature_enabled_in_k8s_resource: {{ default true .Values.foo_feature_enabled }}
Run Code Online (Sandbox Code Playgroud)

也就是说 - “如果foo_feature_enabled设置为 Helm 输入中的任何值(通过--setvalues.yaml等),则设置feature_enabled_in_k8s_resource为该值 - else(如果未设置),则设置feature_enabled_in_k8s_resourcetrue

但是,我无法按照预期覆盖该值 -false在 中设置值values.yaml和/或--set foo_feature_enabled=false作为参数传递,仍然会导致模板保存值为true

我怀疑这是因为这false是一个“虚假”值,因此default将其解析为“需要替换”。

传递一个字符串值("false"in values.yaml、 或--set-string foo_feature_enabled=false)确实出现(从helm template [...]输出中)设置为feature_enabled_in_k8s_resource-"false"但不清楚 Kubernetes 产生的实际应用程序是否会正确解释它(也就是说 - 它可能会解释一个非空字符串作为“真实”,让我们回到原来的默认行为)。即使这有效,它在某种程度上感觉很糟糕,表明我错过了“正确的”解决方案。

(据推测,实际的解决方案是 Helm 图表永远不会default-true但在使用我无法控制的图表时,这对我没有帮助!)

小智 7

使用ne(不等于)的干净(尽管有点不清楚)解决方案

feature_enabled_in_k8s_resource: {{ ne .Values.foo_feature_enabled false }}
Run Code Online (Sandbox Code Playgroud)
.Values.foo_feature_enabled 真的 错误的 空或空 未指定
feature_enabled_in_k8s_resource 真的 错误的 真的 真的