在我的 values.yaml 中,我有:
isLocal: false
localEnv:
url: abcd
prodEnv:
url: defg
Run Code Online (Sandbox Code Playgroud)
然后我有一个service.yaml:
{{- if .Values.isLocal }}
{{- $env := .Values.localEnv }}
{{- else}}
{{- $env := .Values.prodEnv }}
{{- end}}
url: {{ $env.url}}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我收到了“未定义变量“$env””错误,有人知道如何实现吗?谢谢!
小智 15
实际上,您可以在块外部定义变量 $env并使用with块if为其赋值。=if
{{- $env := "" }}
{{- if .Values.isLocal }}
{{- $env = .Values.localEnv }}
{{- else}}
{{- $env = .Values.prodEnv }}
{{- end}}
url: {{ $env.url}}
Run Code Online (Sandbox Code Playgroud)
请注意:
:=将在赋值时声明变量。另一方面,=只会赋值。如果使用:=inif,它将声明一个新的局部变量 $env ,这不会影响块外声明的 $env 的值if。
变量的范围扩展到声明它的控制结构(“if”、“with”或“range”)的“结束”操作......
所以你的声明$env在{{ if }}...{{ end }}块的末尾超出了范围,这不是很有用。
Helm 还包含(几乎全部)一个名为Sprig的支持模板库,其中包含一个ternary函数,其行为有点像内联“if”语句。对于你的例子,你可以写
{{- $env := ternary .Values.localEnv .Values.prodEnv .Values.isLocal -}}
Run Code Online (Sandbox Code Playgroud)
(还可以考虑为每个环境编写完全独立的 Helm 值文件,并使用 安装图表helm install -f prod.yaml,而不是尝试将每个可能的环境封装在单个文件中。)
另一种方法是在启动if/else块之前创建变量。例如:
{{- $env := .Values.prodEnv -}}
{{ if .Values.isLocal }}
{{- $env = .Values.localEnv -}}
{{ end}}
Run Code Online (Sandbox Code Playgroud)
请注意,我没有:=在if块内使用运算符,因为已经创建了变量。
进而
url: {{ $env.url}}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10487 次 |
| 最近记录: |