在 Helm 模板中编码整数
Encode integer in Helm template
我正在为 Web 服务开发一组 Helm 模板,该模板将整数 ID 作为其配置的一部分。该 ID 成为服务端点的一部分,编码为网络安全的 base64 字符集:
0=A
1=B
2=C
...
26=a
...
63=_
在我的 Helm 模板中,我想获取该整数 Id 并确定编码值,以便我可以将其插入 Nginx location
块中。实际的编码逻辑类似于(伪代码):
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 }}
.
还有别的办法吗?
我终于想到了这个:
{{- 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 的值不为 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 }}
这仍然有点难看,但比大量查找要好。
我正在为 Web 服务开发一组 Helm 模板,该模板将整数 ID 作为其配置的一部分。该 ID 成为服务端点的一部分,编码为网络安全的 base64 字符集:
0=A
1=B
2=C
...
26=a
...
63=_
在我的 Helm 模板中,我想获取该整数 Id 并确定编码值,以便我可以将其插入 Nginx location
块中。实际的编码逻辑类似于(伪代码):
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 }}
.
还有别的办法吗?
我终于想到了这个:
{{- 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 的值不为 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 }}
这仍然有点难看,但比大量查找要好。