Как шаблонизировать объект File в Helm - PullRequest
0 голосов
/ 28 февраля 2019

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

У меня есть шаблон Secret, определенный

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 Ответ

0 голосов
/ 28 февраля 2019

Решено это

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