将 helm 字典转换为列表



我正在使用 Helm 图表来控制为部署中的某个容器设置的环境变量。

在我的Values.yaml中,我有一个名为env的条目,它是一个字典:

image:
repository: xxxx.yyyyy.com/myimage
pullPolicy: IfNotPresent
# Enviroment variables that will be passed to the container.
env: {}

现在,我将使用--set将变量传递给env字典:

helm upgrade mydeployment chart --set env.VARIABLE=test

但是,这必须转换为一个列表以遵守 Kubernetes yaml:

spec:
template:
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
# This should come from that dict
env:
- name: VARIABLE
value: "test"

我不知道如何使用 Helm 的模板语言(sprig/go)来实现这一点。甚至可能吗?

为了遍历地图,核心 Go 文本/模板语言提供了一个可以遍历地图或数组的range关键字。

{{ range $key, $value := .Values.env }}
...
{{ end }}

在其中,您可以放置任意文本。 Helm 不要求这是任何特定类型的 YAML 构造,只要最终结果是有效的 YAML 即可。 对于此设置,典型的循环如下所示

env:
{{- range $key, $value := .Values.env }}
- name: {{ quote $key }}
value: {{ quote $value }}
{{- end }}

您确实需要注意此处的缩进。 根据经验,通常在打开{{内包含一个-"吞下空白"指示器,而在收盘}}内不包含一个指示器。- name:必须至少与其上方的env:一样缩进(忽略range行),并且value:必须与name:对齐。 我可能会将所有模板语言行(rangeend)从第一列开始,即使它们嵌入在嵌套更多的结构中。

spec:
template:
spec:
containers:
- name: {{ template "chart.fullname" . }}
env:
{{- range $key, $value := .Values.env }}
- name: {{ quote $key }}
value: {{ quote $value }}
{{- end }}
image: {{ .Values.registry }}/{{ .Values.image }}:{{ .Values.tag }}

相关内容

  • 没有找到相关文章

最新更新