Кодировать целое число в шаблоне Helm - PullRequest
1 голос
/ 11 апреля 2020

Я работаю над набором шаблонов Helm для веб-службы, в состав которой входит целочисленный идентификатор. Этот идентификатор становится частью конечных точек службы, закодированных в веб-безопасный набор символов base64:

0=A
1=B
2=C
...
26=a
...
63=_

В моем шаблоне Helm я хочу взять этот целочисленный идентификатор и определить закодированное значение, чтобы я мог вставить это в Nginx location блоке. Фактическая логика кодирования c выглядит примерно так (псевдо-код):

func Encode(int i) {
  byte b = i << 2 # shift integer two bits
  string s = web_base64(b)
  char c = s[0] # return first char only
}

Пока что самое близкое, что я получил в Helm, это просто создание поиска, например $d := dict "0" "A" "1" "B" "2" "C" ..., и затем использование {{ .Values.Id | toString | get $d }}.

Есть ли другой способ?

1 Ответ

0 голосов
/ 12 апреля 2020

Я, наконец, придумал это:

{{- with .Values.deployment.Id | int }}
  {{- if eq . 63 }}_
  {{- else if eq . 62 }}-
  {{- else if gt . 51 }}{{- sub . 52 | printf "%c" }}
  {{- else if gt . 25 }}{{- add . 71 | printf "%c" }}
  {{- else }}{{- add . 65 | printf "%c" }}
  {{- end }}
{{- end }}

Понимание, что я мог сделать порядковое преобразование через printf, было большим моментом а-ха, и это прекрасно работает, пока значение для .Id isn '0. Если это так, весь блок просто пропускается. Кажется, это ограничение ключевого слова with. Итак, я остался с этим:

{{- if eq (int .Values.deployment.Id) 63 }}_
{{- else if eq (int .Values.deployment.Id) 62 }}-
{{- else if gt (int .Values.deployment.Id) 51 }}{{- sub (int .Values.deployment.Id) 52 | printf "%c" }}
{{- else if gt (int .Values.deployment.Id) 25 }}{{- add (int .Values.deployment.Id) 71 | printf "%c" }}
{{- else }}{{- add (int .Values.deployment.Id) 65 | printf "%c" }}
{{- end }}

Что все еще немного уродливо, но лучше, чем огромный поиск.

...