【问题标题】:How to add counter to helm range如何将计数器添加到掌舵范围
【发布时间】:2020-05-19 16:30:21
【问题描述】:

这是我的 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 template ... 命令出现以下错误:

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

那我做错了什么?

【问题讨论】:

    标签: kubernetes kubernetes-helm go-templates


    【解决方案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 支持库包含将任意对象转换为字符串并在适当位置改变字典类型对象的函数,尽管这开始进入在您的模板中编写真实代码的不幸领域语言。

    【讨论】:

      【解决方案2】:

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

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

      {{ $c = add1 $c }}
      

      【讨论】:

        猜你喜欢
        • 2019-10-07
        • 1970-01-01
        • 1970-01-01
        • 2019-03-15
        • 1970-01-01
        • 1970-01-01
        • 2017-04-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多