我正在制作一个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"
我想我必须在qazxsw poi文件中以某种方式这样做。像这样的东西,但它不起作用。
_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 }}
请指出正确的方向,谢谢
您可以将其重组为具有该密码的单个设置,然后将其注入多个位置。 Helm unexpected <define> in command
文件可能包括
values.yaml
然后单个部署的YAML文件可以包括
databasePassword: default123
对于你所询问的具体逻辑,重要的是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
会产生错误,因为它不知道应用默认值的值。