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

Posted

技术标签:

【中文标题】我可以使用 _helpers.tpl 中的函数在 helm 图表中填写 values.yaml 吗?【英文标题】:Can I use functions from _helpers.tpl to fill out values.yaml in helm charts? 【发布时间】:2021-09-29 18:01:39 【问题描述】:

现在,我有一个 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
...

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

我想知道:这可能吗?我在这方面遇到了很多麻烦,并且通常使用帮助文件,所以如果有人能在正确的方向上推动我如何完成这一点,我也将不胜感激!

谢谢:)

【问题讨论】:

【参考方案1】:

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

# values.yaml (or a `helm install -f` values file)
numberOfPorts: 11
startingPort: 7980

您可以使用until template function 将其转换为数字列表:

- $dbs := until .Values.numberOfPorts 

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

imageName:
  ports:
- $startingPort := .Values.startingPort 
- range $i := until .Values.numberOfPorts 
    - containerPort:  add $startingPort $i 
      name: db $i 
      protocol: TCP
- end 

【讨论】:

以上是关于我可以使用 _helpers.tpl 中的函数在 helm 图表中填写 values.yaml 吗?的主要内容,如果未能解决你的问题,请参考以下文章

__LINE__ __FILE__ 或 qml 中的类似函数

Golang中的init函数

C# 中的_BitScanForward?

PHP:每当调用子类中的函数时调用函数

R语言_list()函数用法

JavaScript学习系列博客_16_JavaScript中的函数的参数返回值