【问题标题】:How to template a File object in Helm如何在 Helm 中模板化文件对象
【发布时间】:2019-02-28 00:16:06
【问题描述】:

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

我定义了一个 Secret 模板

apiVersion: v1
kind: Secret
metadata:
  name: "awx-secrets"
type: Opaque
data:
  confd_contents: <value-is-an-entire-file>

现在应该是键 confd_contents 的值的文件 credentials.py 看起来像

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 并且正确呈现秘密。

我试图通过这样做将它定义为文件对象:

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

知道我做错了什么或有什么帮助吗?

【问题讨论】:

    标签: kubernetes kubernetes-helm helmfile


    【解决方案1】:

    解决了这个问题

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

    【讨论】:

      猜你喜欢
      • 2020-05-09
      • 2011-09-26
      • 2019-09-21
      • 2021-01-25
      • 2018-05-15
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多