如何增加掌舵范围的计数器

时间:2020-02-03 21:21:38

标签: kubernetes kubernetes-helm go-templates

这是我的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

那我在做什么错了?

1 个答案:

答案 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支持库包含将任意对象转换为字符串并对适当的字典型对象进行变异的函数,尽管这开始陷入不幸的地步,无法在其中编写真实代码您的模板语言。

相关问题