Helm - Configmap - заменять только содержимое файла, а не имена файлов

Я определил файлы application.properties в директории config. Config dir находится на структуре ниже.

config
  application.properties
  application-test.properties
  application-dev.properties
  application-prod.properties

Я создал диаграмму руля для создания карты конфигурации. График руля определяется как показано ниже

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-configmap
data:
  {{- (.Files.Glob "config/*").AsConfig | nindent 2 }}

Я вижу, что configmap создан.

Мы потребляем ConfigMap через переменные среды в работающем контейнере, используя envFrom свойство. (Это в моем файле развертывания yaml)

spec:
   containers:
   - envFrom:
     - configMapRef:
         name: nginx-configmap

Я вижу, что значения хранятся как переменные среды. Однако переменные в нижнем регистре.

server.port=8080
server.name=localhost

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

data:
  {{- (.Files.Glob "config/*").AsConfig | nindent 2 | upper | replace "." "_" }}

Сгенерированный configmap, как показано ниже

  APPLICATION_PROPERTIES: |
    SERVER_PORT = 8080
    SERVER_NAME = LOCALHOST

Ниже приведены переменные env внутри контейнера

APPLICATION_PROPERTIES=SERVER_PORT = 8080
SERVER_NAME = LOCALHOST

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

Можно ли этого достичь?

1 ответ

Решение

Попробуй это:

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-configmap
data:
  {{ $root := . }}
  {{ range $path, $bytes := .Files.Glob "config/*" }}
  {{ base $path }}: '{{ $root.Files.Get $path | nindent 2 | upper | replace "." "_"  }}'
  {{ end }}
Другие вопросы по тегам