Helm 模板未呈现正确的条件

Helm template not rendering correct condition

我的 helm 图表中必须有 2 个不同的值,它们的组合决定是否生成文件。 2 个值是

cluster: test
networkpolicy: true

我需要根据 4 种不同的情况生成一个 NetworkPolicy。

Case          |  1   |   2   |  3   |  4 
--------------------------------------------
cluster       | test | test  | prod | prod
networkpolicy | true | false | true | false
--------------------------------------------
Outcome       | true | false | true | fail

上面的table就是我想要的结果了。这是我在 _helpers.tpl 文件

中的代码
{{- define "jenkins.networkpolicy" -}}
{{- if eq .Values.cluster "prod" -}}
  {{- if .Values.networkpolicy -}}
    {{- "true" -}}
  {{- else -}}
    {{- fail "Network policy cannot be disabled in prod" -}}
  {{- end -}}
{{- else -}}
  {{- if .Values.networkpolicy -}}
    {{- "true" -}}
  {{- else -}}
    {{- "false" -}}
  {{- end -}}
{{- end -}}

{{- end -}}

我在我的 networkpolicy.yaml 文件中这样调用它

{{- if (include "jenkins.networkpolicy" .) }}
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
.
.
{{- end }}

上面的代码在 4 个案例中有 3 个工作正常。案例 #2 不起作用。它不应该是 templating/ignoring 文件,但它仍然会生成它。知道我在这里缺少什么吗?

✗ helm template . -f ./values.yaml --set environment.id=test --set cluster=test --set networkpolicy=false | head -10
---
# Source: jkmaster-networkpolicy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-jkmaster-networkpolicy
spec:
  podSelector:
    matchLabels:
      app: test-jkmaster # label of pod to isolate

您的助手函数 returns 具有 "true""false"

的非空字符串

查看 docsif 语句被评估为 false

A pipeline is evaluated as false if the value is:

  • a boolean false
  • a numeric zero
  • an empty string
  • a nil (empty or null) an empty collection (map, slice, tuple, dict, array)

字符串 "false" 被评估为布尔值 true

"false" 替换为空字符串 "" 会使您的代码按预期工作

{{- define "jenkins.networkpolicy" -}}
{{- if eq .Values.cluster "prod" -}}
  {{- if .Values.networkpolicy -}}
    {{- "true" -}}
  {{- else -}}
    {{- fail "Network policy cannot be disabled in prod" -}}
  {{- end -}}
{{- else -}}
  {{- if .Values.networkpolicy -}}
    {{- "true" -}}
  {{- else -}}
    {{- "" -}}
  {{- end -}}
{{- end -}}

{{- end -}}