如何在掌舵范围内添加计数器

How to add counter to helm range

这是我的 values.yaml 文件:

options:
  collection: "myCollection"
  ttl: 100800
  autoReconnect: true
  reconnectTries: 3
  reconnectInterval: 5

现在我正尝试在我的 configMap 中将其转换为 JSON,如下所示:

options: {
  {{- range $key, $val := .Values.options }}
  {{ $key }}: {{ $val | quote }},
  {{- end }}
}

但我需要删除 JSON 中的最后一个逗号,所以我尝试添加一个计数器:

options: {
  {{ $c := 0 | int }}
  {{- range $key, $val := .Values.options }}
  {{ if ne $c 0 }},{{ end }}
  {{- $key }}: {{ $val | quote }}
  {{ $c := $c add 1 }}
  {{- end }}
}

但是我收到了 helm 模板的以下错误...命令:

at <$c>: can't give argument to non-function $c

那我做错了什么?

Helm 有 an undocumented toJson template function,所以如果你能以正确的格式获取数据,你可以要求它序列化它。

管理嵌入式 JSON 文件的引用会很棘手。两个不错的选择是使用 YAML 块标量,其中行首的缩进分隔内容,或者将其视为 .

apiVersion: v1
kind: ConfigMap
metadata:
  name: x
data:
  optionsAsBlockScalar: >-
{{ .Values.options | toJson | indent 4 }}
binaryData:
  optionsAsBase64: {{ .Values.options | toJson | b64enc }}

请注意,此方法将保留 JSON 内容中对象的本机类型;您的示例将所有内容强制为字符串。如果您需要所有内容都是字符串,那么 Sprig 支持库包含将任意对象转换为字符串并就地改变字典类型对象的函数,尽管这开始进入编写真实代码的不幸领域你的模板语言。

在您的情况下增加计数器的最简单方法是替换

{{ $c := $c add 1 }}

{{ $c = add1 $c }}