我在如何获取文件模板方面有点蠢蠢欲动。
我定义了一个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
知道我做错了什么或者可能有什么帮助?
解决了这个问题
apiVersion: v1
kind: Secret
metadata:
name: "awx-secrets"
type: Opaque
data:
confd_contents: {{ (tpl (.Files.Get "files/credentials.py") . | quote ) }}