将相同的掌舵值分配给多个目标

时间:2019-03-11 08:23:26

标签: kubernetes-helm go-templates

我正在处理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

请为我指明正确的方向,谢谢

1 个答案:

答案 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会产生错误,因为它不知道将默认值应用于什么值。