这是我的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 }}
}
但是我在舵模板...命令中遇到以下错误:
at <$c>: can't give argument to non-function $c
那我在做什么错了?
答案 0 :(得分:1)
Helm有an undocumented toJson
template function,因此,如果您能以正确的格式获取数据,则可以要求它进行序列化。
管理嵌入式JSON文件的报价会很棘手。两种不错的选择是使用YAML块标量,其中行首的缩进可分隔内容,或将其视为binary data。
apiVersion: v1
kind: ConfigMap
metadata:
name: x
data:
optionsAsBlockScalar: >-
{{ .Values.options | toJson | indent 4 }}
binaryData:
optionsAsBase64: {{ .Values.options | toJson | b64enc }}
请注意,这种方法将在JSON内容中保留对象的本机类型。您的示例将所有内容强制为字符串。如果您需要所有内容都为字符串,则Sprig支持库包含将任意对象转换为字符串并对适当的字典型对象进行变异的函数,尽管这开始陷入不幸的地步,无法在其中编写真实代码您的模板语言。