helm 模板检查空字符串

Avi*_*Avi 13 kubernetes kubernetes-helm

我被要求修改 Helm 模板以适应一些更改,以检查值是否为空,如下面的代码片段所示。我需要检查代码片段$var.alias内部printf并编写自定义逻辑来打印自定义值。任何相同的指针都会很棒。

{{- range $key, $value := .Values.testsConfig.keyVaults -}}
{{- range $secret, $var := $value.secrets -}}
{{- if nil $var.alias}}
{{- end -}}
{{ $args = append $args (printf "%s=/mnt/secrets/%s/%s" $var.alias $key $var.name | quote) }}
{{- end -}}
{{- end -}}
Run Code Online (Sandbox Code Playgroud)

Mat*_*att 40

我决定测试一下 Madniel 在他的评论中写的内容。这是我的文件:

\n

值.yaml

\n
someString: abcdef\nemptyString: ""\n# nilString:\n
Run Code Online (Sandbox Code Playgroud)\n

模板/test.yaml

\n
{{ printf "someEmptyString=%q)" .Values.someString }}\n{{ printf "emptyString=%q)" .Values.emptyString }}\n{{ printf "nilString=%q)" .Values.nilString }}\n\n{{- if .Values.someString }}\n{{ printf "someString evaluates to true" }}\n{{- end -}}\n\n{{- if .Values.emptyString }}\n{{ printf "emptyString evaluates to true" }}\n{{- end -}}\n\n{{- if .Values.nilString }}\n{{ printf "nilString evaluates to true" }}\n{{- end -}}\n\n{{- if not .Values.emptyString }}\n{{ printf "not emptyString evaluates to true" }}\n{{- end -}}\n\n{{- if not .Values.nilString }}\n{{ printf "not nilString evaluates to true" }}\n{{- end -}}\n
Run Code Online (Sandbox Code Playgroud)\n

头盔模板输出:

\n
\xe2\x9e\x9c  helm template . --debug\ninstall.go:173: [debug] Original chart version: ""\ninstall.go:190: [debug] CHART PATH: <REDACTED>\n\n---\n# Source: asd/templates/test.yaml\nsomeEmptyString="abcdef")\nemptyString="")\nnilString=%!q(<nil>))\nsomeString evaluates to true\nnot emptyString evaluates to true\nnot nilString evaluates to true\n
Run Code Online (Sandbox Code Playgroud)\n

所以是的,如果你使用它应该可以工作{{ if $var.alias }}

\n


B.Z*_*.Z. 6

  1. 检查MyKeykey 是否存在并且具有非空值,即不是0, false, "",之一null
{{- if .Values.MyKey }}
Run Code Online (Sandbox Code Playgroud)
  1. 检查MyKeykey 是否存在且其值不为 null:
{{ if not (quote .Values.emptyString | empty)  }}
Run Code Online (Sandbox Code Playgroud)
  1. 检查MyKey密钥是否存在:
{{- if hasKey .Values "MyKey" }}
Run Code Online (Sandbox Code Playgroud)

例如

MyKey: 5
Run Code Online (Sandbox Code Playgroud)

对于 1 返回 true,对于 2 返回 true,对于 3 返回 true

MyKey: false
Run Code Online (Sandbox Code Playgroud)

1 为 false,2 为 true,3 为 true

MyKey:
Run Code Online (Sandbox Code Playgroud)

1 为 false,2 为 false,3 为 true

DifferentKey:
Run Code Online (Sandbox Code Playgroud)

1 为 false,2 为 false,3 为 false

相同的结果也适用于地图和列表。

答案受到以下 StackOverflow 答案的启发:/sf/answers/5231296591/