如何在掌舵图中创建模板?
How to create template in the helm chart?
我需要为秘密值创建模板。
这是秘密文件:
apiVersion: v1
kind: Secret
metadata:
name: secret
type: Opaque
stringData:
"user": "user"
"password": "password"
这就是我在 _helpers.tpl
中创建的内容
{{/*
User
*/}}
{{- define "@@chartName@@.user" -}}
{{- $secret := lookup "v1" "Secret" .Release.Namespace "secret" -}}
{{- if $secret -}}
{{- print $secret.stringData.user}}
{{- else -}}
{{- fail "The secret is absent" -}}
{{- end -}}
{{- end -}}
但它不起作用,我得到错误:<$secret.stringData.user>: nil pointer evaluating interface {}.user
我在安装helm chart之前创建了secret,不知道这个错误是什么原因。感谢您的帮助!
如果 $secret
存在但不包含 stringData
,您将收到该错误。
在 Helm 级别,您可以通过使用 default
函数强制它存在(“没有 stringData
”和“没有 user
" 大致相同的错误):
{{- $secret := lookup "v1" "Secret" .Release.Namespace "secret" | default dict -}}
{{- $stringData := $secret.stringData | default dict -}}
{{- $stringData.user | required "The secret is absent" -}}
在更高级别,如果可以读回 Secret,它可能只有 base64 编码的 data
字段(即使它是使用 stringData
创建的)。 Helm 在你的 pod spec 中提供了一个 b64dec
function that could decode it. It'd be better to refer to the secret as an environment variable,或者直接将值传递给 Helm。
# in a Pod spec; without using Helm `lookup`
env:
- name: USER
valueFrom:
secretKeyRef:
name: secret
key: user
# or passed directly via Helm
{{- $credentials := .Values.credentials | default dict -}}
{{- $credentials.user | required "missing user.credentials" -}}
我需要为秘密值创建模板。
这是秘密文件:
apiVersion: v1
kind: Secret
metadata:
name: secret
type: Opaque
stringData:
"user": "user"
"password": "password"
这就是我在 _helpers.tpl
中创建的内容{{/*
User
*/}}
{{- define "@@chartName@@.user" -}}
{{- $secret := lookup "v1" "Secret" .Release.Namespace "secret" -}}
{{- if $secret -}}
{{- print $secret.stringData.user}}
{{- else -}}
{{- fail "The secret is absent" -}}
{{- end -}}
{{- end -}}
但它不起作用,我得到错误:<$secret.stringData.user>: nil pointer evaluating interface {}.user
我在安装helm chart之前创建了secret,不知道这个错误是什么原因。感谢您的帮助!
如果 $secret
存在但不包含 stringData
,您将收到该错误。
在 Helm 级别,您可以通过使用 default
函数强制它存在(“没有 stringData
”和“没有 user
" 大致相同的错误):
{{- $secret := lookup "v1" "Secret" .Release.Namespace "secret" | default dict -}}
{{- $stringData := $secret.stringData | default dict -}}
{{- $stringData.user | required "The secret is absent" -}}
在更高级别,如果可以读回 Secret,它可能只有 base64 编码的 data
字段(即使它是使用 stringData
创建的)。 Helm 在你的 pod spec 中提供了一个 b64dec
function that could decode it. It'd be better to refer to the secret as an environment variable,或者直接将值传递给 Helm。
# in a Pod spec; without using Helm `lookup`
env:
- name: USER
valueFrom:
secretKeyRef:
name: secret
key: user
# or passed directly via Helm
{{- $credentials := .Values.credentials | default dict -}}
{{- $credentials.user | required "missing user.credentials" -}}