Ric*_*ano 4 if-statement kubernetes kubernetes-helm
如何在舵图中检查变量是否为布尔值“true”?我在 Values.yaml 中有一个参数设置为:
myParameter: true
Run Code Online (Sandbox Code Playgroud)
我不太明白以下之间的区别:
{{- if .Values.service.myParameter }}
Run Code Online (Sandbox Code Playgroud)
和
{{- if eq .Values.service.myParameter "true" }}
Run Code Online (Sandbox Code Playgroud)
如果参数设置为布尔值“true”,我希望该流程进入 if 子句
cod*_*diz 12
您可以使用以下片段来检查布尔值
{{if (default .Values.seLinux true)}}
securityContext:
seLinuxOptions:
user: system_u
{{ end }}
Run Code Online (Sandbox Code Playgroud)
然后值文件将包含以下片段
seLinux: true
Run Code Online (Sandbox Code Playgroud)
请让我知道这可不可以帮你。
Gotext/template包的文档解释了该if语句认为“真实”的内容:
空 ["false"] 值为 false、0、任何 nil 指针或接口值,以及任何长度为零的数组、切片、映射或字符串。
YAML 值是类型化的,通常的规则是空值true和false布尔值:
boolean: true
string: other text, but not "true", "false", or "null"
also a string: 'true'
Run Code Online (Sandbox Code Playgroud)
在您的示例中:
{{- if .Values.service.myParameter }}...{{ end }}
Run Code Online (Sandbox Code Playgroud)
只要myParameter存在(不是 Go nil)并且不是零、文字false或空字符串,就会评估为真。
{{- if eq .Values.service.myParameter "true" }}...{{ end }}
Run Code Online (Sandbox Code Playgroud)
只要myParameter恰好是字符串 "true",而不是布尔值,就会评估为真true。(事实上,我认为如果它是一个布尔值,你会从模板引擎中得到一个类型错误。)
我们有一些模板引擎,用于将布尔值呈现为字符串的值,但在其他地方我们传递布尔值。
因此,我们的图表必须支持布尔值true| false或字符串"true"|"false"。
但是 helm 模板(我猜是 golang)不断将 a 转换"true"为布尔值,但不是"false",同时布尔运算符将任何字符串视为true...此外,eq如果比较 bool 和字符串,则会失败,因此必须将其转换。
最简单的方法是将值设置为空字符串,在if https://golang.org/pkg/text/template/#hdr-Actions中计算结果为 false ,因此:
rbac:
enabled: ""
Run Code Online (Sandbox Code Playgroud)
经过大量测试,我得出了这个表达式:
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 }}
Run Code Online (Sandbox Code Playgroud)
因此,这将检查该值的字符串版本是否不是 string "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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16496 次 |
| 最近记录: |