这是我的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
所以我在做什么错呢?
Helm具有an undocumented toJson
template function,所以如果您可以正确的格式获取数据,则可以要求它进行序列化。
管理嵌入式JSON文件的报价会很棘手。两个不错的选择是使用YAML块标量,其中在行的开头缩进即可界定内容,或将其视为toJson
。
binary data
请注意,此方法将在JSON内容中保留对象的本机类型;您的示例将所有内容强制为字符串。如果您需要所有内容都为字符串,则apiVersion: v1
kind: ConfigMap
metadata:
name: x
data:
optionsAsBlockScalar: >-
{{ .Values.options | toJson | indent 4 }}
binaryData:
optionsAsBase64: {{ .Values.options | toJson | b64enc }}
支持库包含将任意对象转换为字符串并在适当的地方更改字典型对象的函数,尽管这开始陷入在模板中编写实际代码的不幸境地语言。