我怎样才能检查一个变量是否为布尔值“true”?我在Values.yaml中有一个参数设置为:
myParameter: true
我不太明白以下两者之间的区别:
{{- if .Values.service.myParameter }}
以及
{{- if eq .Values.service.myParameter "true" }}
如果参数设置为布尔值“true”,则流进入if子句
dauxcl2d1#
documentation for the Go text/template package解释了if语句认为什么是“真”:空[“false”]值包括false、0、任何nil指针或接口值,以及任何长度为零的数组、切片、Map或字符串。YAML值是类型化的,通常的规则是裸true和false是布尔值:
text/template
if
true
false
boolean: true string: other text, but not "true", "false", or "null" also a string: 'true'
在您的示例中:
{{- if .Values.service.myParameter }}...{{ end }}
只要myParameter存在(不是Go语言nil),并且不是零、文本false或空字符串,就会计算为true。
myParameter
nil
{{- if eq .Values.service.myParameter "true" }}...{{ end }}
只要myParameter恰好是 string"true",而不是布尔值true,则将求值为true(我认为如果它是布尔值,实际上您将从模板引擎中得到类型错误)。
"true"
6uxekuva2#
您可以使用以下代码片段来检查布尔值
{{if (default .Values.seLinux true)}} securityContext: seLinuxOptions: user: system_u {{ end }}
然后,Values文件将包含以下代码段
seLinux: true
如果有帮助请告诉我。
pzfprimi3#
我们有一些模板引擎,用于将布尔值呈现为字符串,但在其他地方我们传递布尔值。因此,我们的图表必须同时支持布尔值true|false或字符串"true"|"false"。但是helm模板(我猜是golang)一直在把"true"转换成布尔值,而不是"false",同时布尔运算符把任何字符串都看作true......而且,如果你比较一个布尔值和一个字符串,eq会失败,所以你必须转换它。最简单的方法是将值设置为空字符串,在if https://golang.org/pkg/text/template/#hdr-Actions中计算为false,因此:
"true"|"false"
"false"
eq
rbac: enabled: ""
经过大量的测试,我得出了这样的表达式:
value: | {{ .Values.rbac.enabled }} toString: | {{ toString .Values.rbac.enabled }} evaluated: | {{ and (not (eq (toString .Values.rbac.enabled) `"false"`)) .Values.rbac.enabled }} {{- if and (not (eq (toString .Values.rbac.enabled) `"false"`)) .Values.rbac.enabled }} isTrue: yeah {{- end }}
因此,它将检查该值的字符串版本是否不是字符串"false",如果不是,则计算该值。它适用于所有组合:
for i in true '"true"' false '"false"'; do helm template charts/foo/ --show-only templates/rbac.yaml --set "rbac.enabled=$i"; done --- # Source: foo/templates/rbac.yaml value: | true toString: | true evaluated: | true isTrue: yeah --- # Source: foo/templates/rbac.yaml value: | "true" toString: | "true" evaluated: | "true" isTrue: yeah --- # Source: foo/templates/rbac.yaml value: | false toString: | false evaluated: | false --- # Source: foo/templates/rbac.yaml value: | "false" toString: | "false" evaluated: | false
h5qlskok4#
您可以使用此表示法来判断布尔值
{{- if eq .Values.service.myParameter true }} {{- end }}
4条答案
按热度按时间dauxcl2d1#
documentation for the Go
text/template
package解释了if
语句认为什么是“真”:空[“false”]值包括false、0、任何nil指针或接口值,以及任何长度为零的数组、切片、Map或字符串。
YAML值是类型化的,通常的规则是裸
true
和false
是布尔值:在您的示例中:
只要
myParameter
存在(不是Go语言nil
),并且不是零、文本false
或空字符串,就会计算为true。只要
myParameter
恰好是 string"true"
,而不是布尔值true
,则将求值为true(我认为如果它是布尔值,实际上您将从模板引擎中得到类型错误)。6uxekuva2#
您可以使用以下代码片段来检查布尔值
然后,Values文件将包含以下代码段
如果有帮助请告诉我。
pzfprimi3#
我们有一些模板引擎,用于将布尔值呈现为字符串,但在其他地方我们传递布尔值。
因此,我们的图表必须同时支持布尔值
true
|false
或字符串"true"|"false"
。但是helm模板(我猜是golang)一直在把
"true"
转换成布尔值,而不是"false"
,同时布尔运算符把任何字符串都看作true
......而且,如果你比较一个布尔值和一个字符串,eq
会失败,所以你必须转换它。最简单的方法是将值设置为空字符串,在
if
https://golang.org/pkg/text/template/#hdr-Actions中计算为false,因此:经过大量的测试,我得出了这样的表达式:
因此,它将检查该值的字符串版本是否不是字符串
"false"
,如果不是,则计算该值。它适用于所有组合:
h5qlskok4#
您可以使用此表示法来判断布尔值