代码之家  ›  专栏  ›  技术社区  ›  Jan

将同一头盔值指定给多个目标

  •  0
  • Jan  · 技术社区  · 7 年前

    我正在制作一个Helm图表,它应该能够启动一个数据库以及一个使用该数据库的客户机。为了避免冗余,我只想提供一个值(用户名、密码),应该分配给客户机和数据库。 只有当它不是默认值时,所有其他值都应该被覆盖。

    所以,当我创建图表并将不同的值传递给 db.env.POSTGRES_PASSWORD 它应该覆盖 users.env.DB_PASSWORD 也

    helm install --debug --dry-run --set db.env.POSTGRES_PASSWORD=test
    

    这里是我的价值观的一小段。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 回复  |  直到 7 年前
        1
  •  0
  •   David Maze    7 年前

    你可以重组它,让它有一个 仅有一个的 设置该密码,然后将其注入多个位置。掌舵 values.yaml 文件可能包括

    databasePassword: default123
    

    然后,各个部署的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 如您所示,它将产生错误,因为它不知道应用默认值的值。