多个值文件中包含多个列表的 Helm 图表

2024-05-17

我有一个包含以下内容的values.yaml:

abc:
  env:
  - name: name01
    value: value01
  - name: name02
    value: value02

我有另一个值文件values-dev.yaml,我在使用-f安装时添加它,它有:

abc:
  env:
  - name: name03
    value: value03

并使用范围将它们列在我的模板中。我希望应用这两个文件后列表会变成这样:

abc:
  env:
  - name: name01
    value: value01
  - name: name02
    value: value02
  - name: name03
    value: value03

但values-dev.yaml值将覆盖values.yaml中的值,它会变成:

abc:
  env:
  - name: name03
    value: value03

如何实现将这两个列表与不同值文件中的相同字段名称合并?


简短的回答是,你不能合并lists.

在你的情况下abc.env is the keyvalue是一个列表。让我用等效的符号重写您的第一个值文件,它会更清晰:

abc:
  env: [{name: name01, value: value01}, {name: name02, value: value02}]

所以 Helm 正在做预期的事情,覆盖关键abc.env与最后提供的一个。

解决方案是重新构建您的值文件,如下所示:

abc:
  env:
    name01: value01
    name02: value02

这样,您可以根据需要合并和覆盖您的值文件。这样,使用命令行标志覆盖单个值也很容易,例如:

--set abc.env.name01=different

借助 Helm 的一些魔力,可以轻松地将这些值作为环境变量传递到您的 pod:

...
  containers:
  - name: abc
    image: abc
    env:
    {{- range $key, $value := .Values.abc.env }}
    - name: {{ $key }}
      value: {{ $value | quote }}
    {{- end }}  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多个值文件中包含多个列表的 Helm 图表 的相关文章

随机推荐