在掌舵的其他依赖关系之间进行选择

时间:2019-02-24 18:47:34

标签: kubernetes kubernetes-helm

我为需要某种数据库的应用程序提供了头盔图。 mysql或postgresql都可以。

我想让图表用户可以选择安装其中之一作为依赖项,如下所示:

dependencies:
- name: mysql
  version: 0.10.2
  repository: https://kubernetes-charts.storage.googleapis.com/
  condition: mysql.enabled
- name: postgresql
  version: 3.11.5
  repository: https://kubernetes-charts.storage.googleapis.com/
  condition: postgresql.enabled

但是,这使得启用它们都成为可能。

有没有一种简单的方法来确保只选择一个?

我当时正在考虑选择一个[mysql, postgres, manual]中的一个变量,并且如果选择了该变量,则依赖于特定的数据库。 -有办法吗?

1 个答案:

答案 0 :(得分:1)

我认为没有简单的方法可以做到这一点。特别是,看起来requirements.yaml condition:字段仅采用布尔值(或它们的列表),而不是任意表达式。来自the Helm documentation

  

条件字段包含一个或多个YAML路径(以逗号分隔)。如果此路径存在于父级的最高值中并且解析为布尔值,则将基于该布尔值启用或禁用图表。仅评估列表中找到的第一个有效路径,如果不存在路径,则该条件无效。

(下面描述的标签机制非常相似,实际上并没有帮助。)

当实际写您的Deployment规范时,您将拥有一个更普通的条件系统,并且可以测试仅设置了其中一个值;因此,我认为您不能阻止安装冗余数据库,但至少只能使用其中一个。您也可以在NOTES.txt文件中对此事后发出事后警告。

{{ if and .Values.mysql.enabled .Values.postgresql.enabled -}}
WARNING: you have multiple databases enabled in your Helm values file.
Both MySQL and PostgreSQL are installed as part of this chart, but only
PostgreSQL is being used.  You can update this chart installation setting
`--set mysql.enabled=false` to remove the redundant database.

{{ end -}}