yaml中的模板文件

Template file in yaml

Values.yaml

cpulimit: 200m
memlimit: 512M

configmap.yaml

mem_pool_size = {{ ((.Values.memlimit)) mul 0.8 }} --> not working
mem_pool_size = {{  .Values.memlimit mul 0.8 }} --> not working
mem_pool_size = {{ .Values.memlimit * 0.8 }} --> not working
mem_pool_size = {{ .Values.memlimit }} * 0.8 --> not working
mem_pool_size = {{ .Values.memlimit }} mul 0.8 --> not working

尝试了很多方法,但我得到了确切的 solution.if 用户提供的 memlimit 值是 512M,我应该只分配 80% ram,所以该值将是 410M。我正在寻找一种方法,判断掌舵模板是否支持算术运算。有没有这方面的例子。

在 helm 模板中,这是通过 pipelines. Some of them are defined via Go template language and some others are part of Sprig template library 完成的。

我没有找到在 Helm 中有效且有效的完整列表,但我没有找到 Sprig 文档中解释的无法正常工作的列表。

所以首先管道的语法必须是:

{{  .Values.memlimit | mul 2 }}

然而,数学函数仅适用于 int64。但是 512M 不是一个整数。因此,您可以让用户将限制指定为字节或链接更多管道以首先删除 "M" 然后进行计算:

{{ .Values.memlimit | replace "M" "" |mul 2  }}M

由于内存可以用不同的单位指定,您可能需要一些正则表达式:

{{ .Values.memlimit |regexFind "[1-9]+" |mul 2 }}{{ .Values.memlimit | regexFind "[a-zA-Z]+"  }}

但如前所述,所有 Sprig 数学函数仅适用于 int64,因此 mul 0.8 将乘以零,mul 1,6 仅乘以 1,依此类推。

因此,您可能必须等待 Sprig 函数也可以使用浮点数来实现基于百分比的计算,或者您发现 Sprig 提供的 Math 函数和 int64 类型的一些巧妙技巧。

也许像这个答案中解释的那样:

C How to calculate a percentage(perthousands) without floating point precision