Как шаблонизировать объект 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 ) }}