1

我正在努力helmfile并停留在我想要条件变量声明的地方。大致像这样,但在标准模板中。

ENV = "prod"
folder = ""
if ENV == "prod":
    folder = "production"
elif ENV == "qa"
    folder == "qa"
else
    folder = "dev"

我怎样才能实现这样的目标?谢谢

4

2 回答 2

1

如果您确实有可用的 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")

这应该相当于你的逻辑。

于 2021-09-16T00:58:23.880 回答
1

使用{{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
于 2021-08-17T09:02:17.497 回答