Я новичок в 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
...
Любая помощь будет принята с благодарностью, спасибо!