Kubernetes 如何在Helm中为文件对象创建模板

Kubernetes 如何在Helm中为文件对象创建模板,kubernetes,kubernetes-helm,helmfile,Kubernetes,Kubernetes Helm,Helmfile,我对如何将文件模板化有点纠结 我定义了一个秘密模板 apiVersion: v1 kind: Secret metadata: name: "awx-secrets" type: Opaque data: confd_contents: <value-is-an-entire-file> 如您所见,该文件中也有一些值,它们在my values.yaml文件中定义 现在,我想确保文件credentials.py使用正确的值呈现,然后传递给Secret,并且正确呈现Secret

我对如何将文件模板化有点纠结

我定义了一个秘密模板

apiVersion: v1
kind: Secret
metadata:
  name: "awx-secrets"
type: Opaque
data:
  confd_contents: <value-is-an-entire-file>
如您所见,该文件中也有一些值,它们在my values.yaml文件中定义

现在,我想确保文件credentials.py使用正确的值呈现,然后传递给Secret,并且正确呈现Secret

我尝试通过以下操作将其定义为文件对象:

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安装时,会出现错误:

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 ) }}
解决了这个问题

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