我们在helm hooks的yaml文件中有下面的env变量。
env:
- name:PASSWORD
value: {{ .Values.cmpassword | default "User@1234" | quote }}
我需要检查是否已经创建了一个特定的秘密,然后密码应该从秘密中获取值,如
{ if kubectl get secret passwdsecret1 -o yaml | grep password }}
valueFrom:
secretKeyRef:
name: cmpasswdsecret
key: password
{{else}}
value: {{ .Values.global.cmpassword | default "User@1234" | quote }}
{{end}}
是否可以检查是否创建了秘密。如果秘密是可用的,则从中获取值,或者从值文件中获取值。
Bitnami Helm图通常通过将相关的Secret名称作为配置选项来解决这个问题。我建议将此作为一种有用的通用方法,因为无论集群中实际有什么,您都将获得一致的部署。如果管理员说秘密应该存在,但它不存在,pod将启动失败;这可能是比退回到不安全的默认值更好的结果。
这个的values.yaml
配置看起来像
# existingSecret, if set, has the name of a Secret to use for
# credentials. This must contain a key `password`.
# existingSecret:
# cmpassword specifies the password. Ignored if `existingSecret`
# is provided.
cmpassword: User@1234
然后在实际的模板代码中,如果指定了existingSecret
,则可以生成secretKeyRef
,如果没有指定则返回到cmpassword
。
env:
- name: PASSWORD
{{- with .Values.existingSecret }}
valueFrom:
secretKeyRef:
name: {{ . }}
key: password
{{- else }}
value: {{ .Values.cmpassword | required "either existingSecret or cmpassword is required" | quote }}
{{- end }}