我正在努力helmfile
并停留在我想要条件变量声明的地方。大致像这样,但在标准模板中。
ENV = "prod"
folder = ""
if ENV == "prod":
folder = "production"
elif ENV == "qa"
folder == "qa"
else
folder = "dev"
我怎样才能实现这样的目标?谢谢
我正在努力helmfile
并停留在我想要条件变量声明的地方。大致像这样,但在标准模板中。
ENV = "prod"
folder = ""
if ENV == "prod":
folder = "production"
elif ENV == "qa"
folder == "qa"
else
folder = "dev"
我怎样才能实现这样的目标?谢谢
如果您确实有可用的 Sprig 函数(在标准 Helm 和 Helmfile 中),那么您可以创建一个dict
,然后使用 a 在其中查找一个值(可能使用标准index
函数)default
。
{{ $ENV := ... }}
{{ $folders := dict "prod" "production" "qa" "qa" }}
{{ $folder := index $folders $ENV | default "dev" }}
Helmfile 也有自己的版本get
,包括默认功能;所以特别是在 Helmfile 中(但不在核心 Gotext/template
或 Sprig 扩展中,所以不是标准 Helm)你可以说
{{/* get "key" "default" (dict ...) */}}
{{ $folder := get $ENV "dev" $folders }}
在 Python 中这两个看起来像:
folders = { "prod": "production", "qa": "qa" }
folder = folders.get(ENV, "dev")
这应该相当于你的逻辑。
使用{{if}}
操作和eq
模板函数将ENV
变量与某些值进行比较:
{{$ENV := "prod"}}
{{$folder := ""}}
{{if eq $ENV "prod"}}
{{$folder = "production"}}
{{else if eq $ENV "qa"}}
{{$folder = "qa"}}
{{else}}
{{$folder = "dev"}}
{{end}}
请注意,这不是“条件声明”。我们$folder
“无条件地”声明并用于{{if}}
更改其值。
这是一个可运行的演示来测试上述模板:
func main() {
t := template.Must(template.New("").Parse(src))
for _, env := range []string{"prod", "qa", "other"} {
if err := t.Execute(os.Stdout, env); err != nil {
panic(err)
}
}
}
const src = `{{$ENV := .}}
{{- $folder := "" -}}
{{- if eq $ENV "prod"}}
{{$folder = "production"}}
{{else if eq $ENV "qa"}}
{{- $folder = "qa" -}}
{{else}}
{{- $folder = "dev" -}}
{{end}}
$ENV = {{$ENV}}; $folder = {{$folder}}`
输出(在Go Playground上试试):
$ENV = prod; $folder = production
$ENV = qa; $folder = qa
$ENV = other; $folder = dev