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"
值
的非空字符串
查看 docs 当 if
语句被评估为 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 -}}
我的 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"
值
查看 docs 当 if
语句被评估为 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 -}}