Как шаблонизировать объект File в Helm

Я немного рассуждаю о том, как получить файл с шаблонами.

У меня есть секретный шаблон

apiVersion: v1
kind: Secret
metadata:
  name: "awx-secrets"
type: Opaque
data:
  confd_contents: <value-is-an-entire-file>

Теперь файл credentials.py это должно быть значение для ключа confd_contents похоже

DATABASES = {
    'default': {
        'ATOMIC_REQUESTS': True,
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': "{{ .Values.dbDatabaseName }}",
        'USER': "{{ .Values.dbUser }}",
        'PASSWORD': "{{ .Values.dbPassword }}",
        'HOST': "{{ .Values.dbHostname }}",
        'PORT': "{{ .Values.dbService.port }}",
    }
}

Как вы можете видеть, в этом файле также есть значения, которые определены в моем values.yaml файл.

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

Я попытался определить его как объект File, выполнив это:

apiVersion: v1
kind: Secret
metadata:
  name: "awx-secrets"
type: Opaque
data:
  confd_contents: {{ .Files.Get "files/credentials.py" }}

Но это не работает. Если я попытаюсь создать шаблон, я получу реальные имена переменных:

helm template management 

apiVersion: v1
kind: Secret
metadata:
  name: "awx-secrets"
type: Opaque
data:
  confd_contents: DATABASES = {
    'default': {
        'ATOMIC_REQUESTS': True,
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': "{{ .Values.dbDatabaseName }}",
        'USER': "{{ .Values.dbUser }}",
        'PASSWORD': "{{ .Values.dbPassword }}",
        'HOST': "{{ .Values.dbHostname }}",
        'PORT': "{{ .Values.dbService.port }}",
    }
}

Я также попытался поместить весь файл в мой секретный шаблон. Что-то вроде

apiVersion: v1
kind: Secret
metadata:
  name: "awx-secrets"
type: Opaque
data:
  confd_contents: DATABASES = {
    'default': {
        'ATOMIC_REQUESTS': True,
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': "{{ .Values.dbDatabaseName }}",
        'USER': "{{ .Values.dbUser }}",
        'PASSWORD': "{{ .Values.dbPassword }}",
        'HOST': "{{ .Values.dbHostname }}",
        'PORT': "{{ .Values.dbService.port }}",
    }
}

Когда я бегу helm template management, это делает правильно, но когда я делаю helm installЯ получаю ошибку:

error: error parsing test.yaml: error converting YAML to JSON: yaml: line 8: mapping values are not allowed in this context

Есть идеи, что я делаю неправильно или что может помочь?

1 ответ

Решил это

apiVersion: v1
kind: Secret
metadata:
  name: "awx-secrets"
type: Opaque
data:
    confd_contents: {{ (tpl (.Files.Get "files/credentials.py") . | quote ) }}
Другие вопросы по тегам