我可以使用 _helpers.tpl 中的函数在 helm 图表中填写 value.yaml 吗?

Jac*_*son 3 templating go-templates kubernetes kubernetes-helm

现在,我有一个values.yaml,其中有一个部分看起来有点像这样:

...
imageName:
  ports:
    - containerPort: 7980
      name: db0
      protocol: TCP
    - containerPort: 7981
      name: db1
      protocol: TCP
    - containerPort: 7982
      name: db2
      protocol: TCP
    - containerPort: 7983
      name: db3
      protocol: TCP
    - containerPort: 7984
      name: db4
      protocol: TCP
    - containerPort: 7985
      name: db5
      protocol: TCP
    - containerPort: 7986
      name: db6
      protocol: TCP
    - containerPort: 7987
      name: db7
      protocol: TCP
    - containerPort: 7988
      name: db8
      protocol: TCP
    - containerPort: 7989
      name: db9
      protocol: TCP
    - containerPort: 7990
      name: db10
      protocol: TCP
...
Run Code Online (Sandbox Code Playgroud)

我想通过在 _helpers.tpl 中创建一个函数来清理这一问题,该函数将获取最小端口值 (7980) 和最大端口值 (7990),并以该格式为每个端口创建结构。

我想知道:这可能吗?我在这方面遇到了很多麻烦,并且一般使用帮助程序文件,因此如果有人可以将我推向正确的方向以完成此任务,我也将不胜感激!

谢谢 :)

Dav*_*aze 6

这应该是可能的。假设您使用端口数和起始端口配置图表:

# values.yaml (or a `helm install -f` values file)
numberOfPorts: 11
startingPort: 7980
Run Code Online (Sandbox Code Playgroud)

您可以使用until模板函数将其转换为数字列表:

{{- $dbs := until .Values.numberOfPorts }}
Run Code Online (Sandbox Code Playgroud)

现在您可以使用标准range函数来循环该列表。在循环体内,该值将是从 0 到 的整数numberOfPorts - 1,您可以相应地生成列表项。另请注意,它range接管了.特殊变量,因此您需要从循环.Values外部保存所需的任何内容range

imageName:
  ports:
{{- $startingPort := .Values.startingPort }}
{{- range $i := until .Values.numberOfPorts }}
    - containerPort: {{ add $startingPort $i }}
      name: db{{ $i }}
      protocol: TCP
{{- end }}
Run Code Online (Sandbox Code Playgroud)