我正在处理Helm图表,该图表应该同时启动数据库以及使用该数据库的客户端。为了避免冗余,我只想提供一个值(用户名,密码),该值应该分配给客户端和数据库。 并且只有当它不是默认值时,所有其他值都应被覆盖。
因此,当我创建图表并将不同的值传递给db.env.POSTGRES_PASSWORD
时,它也应该覆盖users.env.DB_PASSWORD
helm install --debug --dry-run --set db.env.POSTGRES_PASSWORD=test
这是我的values.yml中的一小段代码
db:
env:
POSTGRES_PASSWORD: "default123"
users:
env:
DB_PASSWORD: "default123"
我认为我必须以某种方式在_helpers.tpl
文件中执行此操作。
这样的东西,但是不起作用。
{{- define "db.env.POSTGRES_PASSWORD" -}}
{{- default "password123" -}}
{{- end -}}
{{- if ne db.env.POSTGRES_PASSWORD "default123" }} # => This line causes the error
{{- define "users.env.DB_PASSWORD" -}}
{{- default .Values.db.env.POSTGRES_PASSWORD -}}
{{- end -}}
{{- end }}
错误:
unexpected <define> in command
请为我指明正确的方向,谢谢
答案 0 :(得分:0)
您可以将其重构为具有该密码的单个设置,然后将其注入多个位置。 Helm values.yaml
文件可以包含
databasePassword: default123
,然后各个Deployment的YAML文件可以包含
env:
- name: DB_PASSWORD
value: {{ .Values.databasePassword | quote }}
对于您要询问的特定逻辑,重要的是{{ define }}
必须始终位于顶层(您不能有条件地定义模板);同样,模板和值设置位于不同的命名空间中(不能使用define
来更改.Values
值)。您可以编写一个模板,该模板始终产生一些特定的密码值,并为其选择一个来源:
{{- define "users.env.DB_PASSWORD" -}}
{{- if ne .Values.db.env.POSTGRES_PASSWORD "default123" -}}
{{- .Values.db.env.POSTGRES_PASSWORD -}}
{{- else -}}
{{- .Values.users.env.DB_PASSWORD -}}
{{- end -}}
并在部署模板中调用它:
env:
- name: DB_PASSWORD
value: {{ include "users.env.DB_PASSWORD" . | quote }}
请务必注意,default
接受两个参数;如您所示,调用db.env.POSTGRES_PASSWORD
会产生错误,因为它不知道将默认值应用于什么值。