получение списка папок в Helm Charts - PullRequest
0 голосов
/ 06 ноября 2018

Получил список файлов конфигурации, которые находятся за пределами папки шаблонов, которые мы вводим в рулевую диаграмму, как показано ниже:

├── configs
│   ├── AllEnvironments
│   │   ├── Infrastructure
│   │   └── Services
│   │       ├── ConfigFile1
│   │       ├── ConfigFile2
│   ├── Apps
│   │   ├── App1
│   │   ├── App2
│   │   └── App3
│   ├── ManagementEnvironments
│   │   ├── Database
│   │   │   ├── DbFile1
│   │   │   └── DbFile2
│   │   ├── Infrastructure
│   ├── TestEnvironments
│   │   ├── Pipeline
│   │   │   └── Pipeline1
│   │   ├── Database
│   │   │   ├── Pipeline2
│   ├── Console
│   │   ├── Console1
│   │   ├── Console2

Пока что это хорошо для нас. Теперь нам нужно разобрать папки и получить список всех папок в конфигах, которые не заканчиваются средами. Таким образом, в основном это диапазон, который включает в себя приложения и консоль в этом случае.

Делая следующее, я получаю повторение приложений 3 раза, так как столько файлов находится под ним, а также консоль 2 раза.

Я хотел бы получить список папок, которые не заканчиваются средой только один раз.

Я пытался взглянуть на шаблоны Go и некоторые наборы инструментов рулевого управления, но у меня нет опыта работы с Go, что кажется необходимым для этого, и я, вероятно, возьму на себя следующие несколько дней. Но сейчас я застрял, поэтому любая помощь приветствуется.

{{- range $path, $bytes  := $.Files.Glob "configs/**" }}
{{- if not (or (dir $path | regexFind "configs.*Environments.*")  (dir $path | regexFind "configs$")) }}
 {{ base (dir $path) }}

{{- end }}
{{- end }}

1 Ответ

0 голосов
/ 09 ноября 2018

Вот способ сделать это, если это поможет кому-то еще:

Графики Helm используют шаблон Go и библиотеку Sprig. Таким образом, используя dict от Sprig, мы можем сохранить предыдущее значение папки, которую мы перечисляем, и распечатать ее, только если текущая папка отличается от предыдущей. Теперь это работает, поскольку файлы перечислены в алфавитном порядке, поэтому файлы в одной папке будут последовательно. Если бы их читали без порядка, такой подход не сработал бы.

{{- $localDict := dict "previous" "-"}}
{{- range $path, $bytes  := $.Files.Glob "configs/**" }}
{{- if not (or (dir $path | regexFind "configs.*Environments.*")  (dir $path | regexFind "configs$")) }}
{{- $folder := base (dir $path) }}
{{- if not (eq $folder $localDict.previous)}}
    {{$folder -}}
{{- end }}
{{- $_ := set $localDict "previous" $folder -}}
{{- end }}
{{- end }}
...