0

我的掌舵图中必须有 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

上表显示了我想要的结果。这是我在_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 不起作用。它不应该模板化/忽略文件,但它仍然会生成它。知道我在这里缺少什么吗?

✗ 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
4

1 回答 1

2

您的辅助函数返回一个非空字符串,其值为"true"or 或"false"

当语句被评估为假时查看文档if

如果值是,则管道被评估为 false:

  • 布尔假
  • 数字零
  • 一个空字符串
  • 一个 nil (empty or null) 一个空集合 (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 -}}
于 2020-10-29T22:32:09.103 回答