Templates 用于组合文件的Helm Go模板

Templates 用于组合文件的Helm Go模板,templates,go,kubernetes,kubernetes-helm,Templates,Go,Kubernetes,Kubernetes Helm,给定为一组JSON文件,其中包含以下简化数据: file1.json: { "name" : "file1" } file2.json: { "name" : "file2" } 等等。 我想创建一个配置映射,最终将这些文件的内容组合成一个JSON映射,如下所示: apiVersion: v1 kind: ConfigMap metadata: name: jsondata data: jsondata: |- { "file1": { "name" : "fi

给定为一组JSON文件,其中包含以下简化数据: file1.json:

{ "name" : "file1" }
file2.json:

{ "name" : "file2" }
等等。 我想创建一个配置映射,最终将这些文件的内容组合成一个JSON映射,如下所示:

apiVersion: v1
kind: ConfigMap
metadata:
  name: jsondata
data:
  jsondata: |-
    {
      "file1":  { "name" : "file1" },
      "file2":  { "name" : "file2" }
    }
apiVersion: v1
kind: ConfigMap
metadata:
  name: jsondata
data:
  jsondata: |-
    {
{{- $root := . }}
{{- range $path, $bytes := .Files.Glob "data/json/*.json" }}
  {{ base $path | replace ".json" "" | quote | indent 4 }}:
  {{ $root.Files.Get $path | indent 6 }}
  {{- "," }}
{{- end }}
    }
请注意,最后一项不应后跟逗号。如果我创建的模板yaml如下所示:

apiVersion: v1
kind: ConfigMap
metadata:
  name: jsondata
data:
  jsondata: |-
    {
      "file1":  { "name" : "file1" },
      "file2":  { "name" : "file2" }
    }
apiVersion: v1
kind: ConfigMap
metadata:
  name: jsondata
data:
  jsondata: |-
    {
{{- $root := . }}
{{- range $path, $bytes := .Files.Glob "data/json/*.json" }}
  {{ base $path | replace ".json" "" | quote | indent 4 }}:
  {{ $root.Files.Get $path | indent 6 }}
  {{- "," }}
{{- end }}
    }
我在file2元素后面加了一个逗号,这打破了json语法

我如何迭代文件并知道我在哪里(第一个或最后一个),以便控制是否插入逗号?我试图找出如何将glob结果的键放入列表,这样我可以先使用rest,但无法找出go模板中的语法

除非您能够演示如何将全局结果放入具有索引的数组中,否则这不是的副本。glob结果没有索引,它是一个文件名/字节的字典

更新: 嗯,我猜这个问题已经过时了,因为它被错误地标记为“复制品”。很遗憾,这个系统在它不是真正的复制品时,却以这种方式关闭了某些东西

为了那些真正需要解决此类问题的人的利益,并且他们没有得到与简单列表上的“副本”基本无关的链接的帮助,这里有一个解决方案:

data:
  appdata: |-
    {
      {{- $candidates := .Files.Glob "data/json/*.json" -}}
      {{- $valuesJson := toJson $candidates -}}
      {{- $filesMap := fromJson $valuesJson -}}
      {{- $outputMap := dict -}}
      {{- range $index, $filename := keys $filesMap -}}
        {{- $fileContents := $.Files.Get $filename -}}
        {{- $fileContentMap := fromJson $fileContents -}}
        {{- $contentName := pluck "name" $fileContentMap | first -}}
        {{- $_ := set $outputMap $filename $contentName -}}
      {{- end -}}
      {{- range $index, $filename := keys $outputMap -}}
        {{- if ne $index 0 -}}
          ,
        {{- end -}}
        {{- pluck $filename $outputMap | first | printf "%q:" | nindent 6 -}}
        {{- $.Files.Get $filename | nindent 8 -}}
      {{- end }}
    }

这个相关的问题是不同的,不能回答这个问题。为此在原文中增加了一段。