如何在Helm中对File对象进行模板化

时间:2019-02-28 00:16:06

标签: kubernetes kubernetes-helm helmfile

我对如何获取文件模板有点烦。

我定义了一个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,并确保正确呈现了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 :(得分:1)

通过

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