В шаблонах руля это делается через конвейеры . Некоторые из них определены с помощью языка шаблонов Go, а некоторые являются частью библиотеки шаблонов Sprig .
Я не нашел полный список, который действителен и работает в Helm, но я не нашел Sprig, который не работает, как объяснено в документации Sprig.
Итак, сначала синтаксис для конвейеров должен быть:
{{ .Values.memlimit | mul 2 }}
Однако математические функции работают только на int64. Но 512M не является инт. Таким образом, вы можете позволить пользователю указать ограничения в байтах или связать несколько каналов, чтобы сначала удалить букву «М», а затем выполнить расчет:
{{ .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 и типом int64.
Может быть, что-то вроде объяснено в этом ответе:
C Как рассчитать процент (в тысячах) без точности с плавающей запятой