kubernetes 舵图中的If子句

6ju8rftf  于 2023-01-29  发布在  Kubernetes
关注(0)|答案(4)|浏览(91)

我怎样才能检查一个变量是否为布尔值“true”?我在Values.yaml中有一个参数设置为:

myParameter: true

我不太明白以下两者之间的区别:

{{- if .Values.service.myParameter }}

以及

{{- if eq .Values.service.myParameter "true" }}

如果参数设置为布尔值“true”,则流进入if子句

dauxcl2d

dauxcl2d1#

documentation for the Go text/template package解释了if语句认为什么是“真”:
空[“false”]值包括false、0、任何nil指针或接口值,以及任何长度为零的数组、切片、Map或字符串。
YAML值是类型化的,通常的规则是裸truefalse是布尔值:

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。

{{- if eq .Values.service.myParameter "true" }}...{{ end }}

只要myParameter恰好是 string"true",而不是布尔值true,则将求值为true(我认为如果它是布尔值,实际上您将从模板引擎中得到类型错误)。

6uxekuva

6uxekuva2#

您可以使用以下代码片段来检查布尔值

{{if (default .Values.seLinux true)}}
      securityContext:
        seLinuxOptions:
          user: system_u
      {{ end }}

然后,Values文件将包含以下代码段

seLinux: true

如果有帮助请告诉我。

pzfprimi

pzfprimi3#

我们有一些模板引擎,用于将布尔值呈现为字符串,但在其他地方我们传递布尔值。
因此,我们的图表必须同时支持布尔值true|false或字符串"true"|"false"
但是helm模板(我猜是golang)一直在把"true"转换成布尔值,而不是"false",同时布尔运算符把任何字符串都看作true......而且,如果你比较一个布尔值和一个字符串,eq会失败,所以你必须转换它。
最简单的方法是将值设置为空字符串,在if https://golang.org/pkg/text/template/#hdr-Actions中计算为false,因此:

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
h5qlskok

h5qlskok4#

您可以使用此表示法来判断布尔值

{{- if eq .Values.service.myParameter true }}

{{- end }}

相关问题