在 Helm 模板中定义一个变量
Define a variable in Helm template
我需要根据 if
语句定义一个变量并多次使用该变量。
为了不重复 if
我尝试了这样的事情:
{{ if condition}}
{{ $my_val = "http" }}
{{ else }}
{{ $my_val = "https" }}
{{ end }}
{{ $my_val }}://google.com
然而这returns一个错误:
Error: render error in "templates/deployment.yaml":
template: templates/deployment.yaml:30:28:
executing "templates/deployment.yaml" at
<include (print $.Template.BasePath "/config.yaml") .>: error calling
include: template: templates/config.yaml:175:59:
executing "templates/config.yaml" at <"https">: undefined variable: $my_val
想法?
最直接的方法是使用 ternary
函数 provided by the Sprig library。那会让你写类似
的东西
{{ $myVal := ternary "http" "https" condition -}}
{{ $myVal }}://google.com
一个更简单但更间接的方法是编写一个模板来生成值并调用它
{{- define "scheme" -}}
{{- if condition }}http{{ else }}https{{ end }}
{{- end -}}
{{ template "scheme" . }}://google.com
如果您需要将其包含在另一个变量中,Helm 提供了一个 include
函数,其作用与 template
类似,只是它是一个 "expression" 而不是直接输出的函数。
{{- $url := printf "%s://google.com" (include "scheme" .) -}}
我需要根据 if
语句定义一个变量并多次使用该变量。
为了不重复 if
我尝试了这样的事情:
{{ if condition}}
{{ $my_val = "http" }}
{{ else }}
{{ $my_val = "https" }}
{{ end }}
{{ $my_val }}://google.com
然而这returns一个错误:
Error: render error in "templates/deployment.yaml":
template: templates/deployment.yaml:30:28:
executing "templates/deployment.yaml" at
<include (print $.Template.BasePath "/config.yaml") .>: error calling
include: template: templates/config.yaml:175:59:
executing "templates/config.yaml" at <"https">: undefined variable: $my_val
想法?
最直接的方法是使用 ternary
函数 provided by the Sprig library。那会让你写类似
{{ $myVal := ternary "http" "https" condition -}}
{{ $myVal }}://google.com
一个更简单但更间接的方法是编写一个模板来生成值并调用它
{{- define "scheme" -}}
{{- if condition }}http{{ else }}https{{ end }}
{{- end -}}
{{ template "scheme" . }}://google.com
如果您需要将其包含在另一个变量中,Helm 提供了一个 include
函数,其作用与 template
类似,只是它是一个 "expression" 而不是直接输出的函数。
{{- $url := printf "%s://google.com" (include "scheme" .) -}}