You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Helm模板渲染JSON时如何移除算术表达式的双引号

Helm生成ConfigMap时保留算术表达式的无引号格式

问题场景

使用Helm构建Kubernetes ConfigMap时,遇到以下问题:

当前配置

  • Helm ConfigMap模板:
apiVersion: v1
kind: ConfigMap
metadata:
    name: {{ .Release.Name }}-config
    {{- include "commonMeta" . | nindent 2 }}
data:
    config.play.ts: |
      const config = {{ tpl (.Values.app.play | mustToPrettyJson) $ | indent 6 }}
      export default config;
  • values.yaml配置:
play:
  PORT: 1114
  PLAY_EXPIRES_IN_MS: 10 * 60 * 1000
  API_URL: "https://stag.com/api"

问题现象

执行helm template后,PLAY_EXPIRES_IN_MS对应的算术表达式10 * 60 * 1000被JSON序列化为带双引号的字符串"10 * 60 * 1000",但我们需要保留无引号的算术表达式形式,且不能依赖固定值的replace操作(值未来可能变化)。


解决方案

放弃直接用mustToPrettyJson序列化,改用Helm模板的遍历+正则判断逻辑,动态处理不同类型的配置值:

方案1:直接在模板中处理

修改ConfigMap的data部分为以下内容:

data:
    config.play.ts: |
      const config = {
      {{- range $key, $val := .Values.app.play }}
        {{ $key }}: {{- if or (kindIs "int" $val) (kindIs "float64" $val) }}
          {{ $val }}
        {{- else if eq (typeOf $val) "string" }}
          {{- if regexMatch "^[0-9\\s\\+\\-\\*/()]+$" $val }}
            {{ $val }}
          {{- else }}
            "{{ $val }}"
          {{- end }}
        {{- end }},
      {{- end }}
      };
      export default config;

方案2:封装为自定义模板函数(更易维护)

  1. 在templates/_helpers.tpl中添加自定义函数:
{{/* 处理TS配置值:数值直接输出,算术表达式字符串去引号,普通字符串保留引号 */}}
{{- define "tsConfigValue" -}}
  {{- if or (kindIs "int" .) (kindIs "float64" .) }}
    {{ . }}
  {{- else if eq (typeOf .) "string" }}
    {{- if regexMatch "^[0-9\\s\\+\\-\\*/()]+$" . }}
      {{ . }}
    {{- else }}
      "{{ . }}"
    {{- end }}
  {{- end }}
{{- end -}}
  1. 在ConfigMap模板中调用该函数:
data:
    config.play.ts: |
      const config = {
      {{- range $key, $val := .Values.app.play }}
        {{ $key }}: {{ include "tsConfigValue" $val }},
      {{- end }}
      };
      export default config;

逻辑说明

  • 对数值类型(int/float64):直接输出值,不加引号
  • 对字符串类型:通过正则判断是否为算术表达式(仅包含数字、空格、+/-/*///(/)),是则直接输出,否则保留双引号
  • 可根据需求扩展正则表达式,比如添加%支持取模运算

内容的提问来源于stack exchange,提问作者Tenzin Lama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 19:03:12