Шаблон Helm Go для объединения файлов - PullRequest
0 голосов
/ 24 мая 2018

Задано как набор файлов 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" }
    }

Обратите внимание, что за последним элементом не следует запятая.Если я создаю шаблон yaml, который выглядит следующим образом:

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 в список , чтобы я мог использовать first и rest , но не могу понять, какой синтаксис будет в шаблоне go.

Это не дубликат обнаружения последнего элемента в массиве с использованием диапазона внутри 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 }}
    }
...