如何获取头盔循环中的最后一个元素?

How to get the last element in helm loop?

values.yaml:

products:
  apples:
    - green
    - red
    - yellow

我想将其转换为图表中的 JSON 文件:

      "products": {
          "apples": [
            "green",
            "red",
            "yellow"
          ]
        },

在 jinja2 中它看起来像这样:

      "products": {
          "apples": [
{% for apple in products.apples%}
            "{{apple}}"{% if not loop.last %},{% endif %}
{% endfor %}
          ]
        },

在 jinja2 中使用 loop.last。如何在 helm 中完成?

真正问题的最简单答案是使用 Helm toJson 功能。

"products": {
{{ toPrettyJson .Values.products | indent 2 }}
}

手动执行此操作:在核心 Go text/template 语言中,您可以在使用 range 遍历结构时分配临时变量。有一个 two-variable 形式可以同时接收索引和值。然后您可以将索引与列表的长度进行比较。

"products": {
  "apples": {
{{- $last := sub (len .Values.products.apples) 1 }}
{{- $index, $apple := range .Values.products.apples }}
    {{ quote $apple }}{{ if ne $index $last }},{{ end }}
{{- end }}
  }
}