Присвоение значения переменной окружения переменной helm - PullRequest
0 голосов
/ 13 июля 2020

Я новичок в helm и хочу иметь возможность записывать переменные проекта gitlab в файлы, используя карты конфигурации и общие переменные среды.

У меня есть набор переменных среды, определенных как переменные проекта gitlab ( gitlab runner предоставляет их как переменные среды) для каждой среды (где <ENV> - это DEV / TEST / PROD для краткости):

MYSQL_USER_<ENV> = "user"
MYSQL_PASSWORD_<ENV> = "pass"

В диаграмме управления каждая среда имеет карту своих переменных . Например, values. .yaml содержит:

envVars:
  MYSQL_USER: $MYSQL_USER_<ENV>
  MYSQL_PASSWORD: $MYSQL_PASSWORD_<ENV>

values.yaml содержит файл Ruby, который будет использовать эти переменные:

files:
  config.rb: |
    mysql['username'] = ENV["MYSQL_USER"]
    mysql['password'] = ENV["MYSQL_PASSWORD"]

configmap.env.yaml определяет:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "mychart.fullname" . }}-config-env
data:
{{- range $config_key, $config_value := .Values.envVars }}
  {{ $config_key }}: {{ $config_value | quote | nindent 4 }}
{{- end }}

configmap.files.yaml определяет:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "mychart.fullname" . }}-config-volume
data: 
{{- range $file_path, $file_content := .Values.files }}
  {{ $file_path }}: |
{{ $file_content | indent 4 -}}
{{- end }}

Наконец, развертывание карты конфигурации (здесь показана только часть карты конфигурации, и я не использую секретов здесь, потому что этот вопрос и так достаточно длинный):

      volumes:
        - name: {{ include "mychart.fullname" . }}-config-volume
          configMap:
            name: {{ include "mychart.fullname" . }}-config-volume
      containers:
        - name: {{ .Chart.Name }}
          volumeMounts:
          - name: {{ include "mychart.fullname" . }}-config-volume
            mountPath: /etc/my-config-dir
          envFrom: 
            - configMapRef:
                name: {{ include "mychart.fullname" . }}-config-env

Итак, в одном предложении рабочий процесс должен быть: MYSQL_USER/PASSWORD_<ENV> сохранен в MYSQL_USER/PASSWORD, который затем записывается в /etc/my-config-dir/config.rb

Кажется, я не могу сделать переменные среды значений. Yaml (MYSQL_USER, MYSQL_PASSWORD) получить значение переменных проекта (MYSQL_USER_<ENV>, MYSQL_PASSWORD_<ENV>) . Я использую helm 3, но {{ env "MYSQL_USER_<ENV>" }} не работает. Я мог бы использовать строковую интерполяцию с именем переменной среды в файле Ruby, но тогда мне нужно было бы знать, какие переменные среды должны быть созданы для каждого контейнера.

Я пытаюсь избежать множественных --set аргументы. Также я не уверен, как здесь можно использовать envsubst ...

Любая помощь будет принята с благодарностью, спасибо!

1 Ответ

0 голосов
/ 14 июля 2020

В итоге я использовал envsubst:

  script:
    - VALUES_FILE=values.${ENV}.yaml
    - envsubst < ${VALUES_FILE}.env > ${VALUES_FILE}
    - helm upgrade ... -f ${VALUES_FILE}
...