Файл шаблона в yaml - PullRequest
       6

Файл шаблона в yaml

0 голосов
/ 29 августа 2018

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

Пробовал много способов, но я не получил точное решение. Если пользователь предоставляет значение memlimit как 512M, я должен назначить только 80% оперативной памяти, поэтому значение будет 410M. Я нахожу способ, поддерживаются ли арифметические операции в шаблонах руля. Есть ли пример для этого.

1 Ответ

0 голосов
/ 31 августа 2018

В шаблонах руля это делается через конвейеры . Некоторые из них определены с помощью языка шаблонов 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 Как рассчитать процент (в тысячах) без точности с плавающей запятой

...