【问题标题】:Encode integer in Helm template在 Helm 模板中编码整数
【发布时间】:2020-04-11 17:36:01
【问题描述】:

我正在为 Web 服务开发一组 Helm 模板,该模板将整数 ID 作为其配置的一部分。该 ID 成为服务端点的一部分,编码为 Web 安全的 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 }}

还有其他方法吗?

【问题讨论】:

    标签: kubernetes-helm sprig-template-functions


    【解决方案1】:

    我终于想到了这个:

    {{- 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 }}
    

    这仍然有点难看,但比巨大的查找要好。

    【讨论】:

    • 也比从 envVars 迁移到 configmap/secret 中的多行值更好。非常感谢!你拯救了我的一天
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 2020-10-16
    • 1970-01-01
    • 2019-09-21
    • 2022-12-17
    • 2021-12-07
    相关资源
    最近更新 更多