ara*_*een 6 kubernetes kubernetes-helm
我有一个 values.yaml ,它具有以下内容:
abc:
env:
- name: name01
value: value01
- name: name02
value: value02
Run Code Online (Sandbox Code Playgroud)
我还有另一个值文件 values-dev.yaml ,我在使用 -f 安装时添加了它,它有:
abc:
env:
- name: name03
value: value03
Run Code Online (Sandbox Code Playgroud)
并使用范围将它们列在我的模板中。我希望在应用这两个文件后,列表会变成这样:
abc:
env:
- name: name01
value: value01
- name: name02
value: value02
- name: name03
value: value03
Run Code Online (Sandbox Code Playgroud)
但是 values-dev.yaml 值将覆盖 values.yaml 中的值,它变成:
abc:
env:
- name: name03
value: value03
Run Code Online (Sandbox Code Playgroud)
如何实现将这 2 个列表与来自不同值文件的相同字段名称合并?
小智 17
简短的回答是,你不能合并lists。
在你的情况下abc.env是key和value是一个列表。让我用等效的符号重写您的第一个值文件,它会更清晰:
abc:
env: [{name: name01, value: value01}, {name: name02, value: value02}]
Run Code Online (Sandbox Code Playgroud)
因此,Helm 正在执行预期的操作,abc.env用最后提供的密钥覆盖密钥。
解决方案是重新构建您的值文件,如下所示:
abc:
env:
name01: value01
name02: value02
Run Code Online (Sandbox Code Playgroud)
这样,您可以根据需要合并和覆盖您的值文件。这样,使用命令行标志覆盖单个值也很容易,例如:
--set abc.env.name01=different
Run Code Online (Sandbox Code Playgroud)
借助 Helm 的一些魔力,可以轻松地将这些值作为环境变量传递到您的 pod:
...
containers:
- name: abc
image: abc
env:
{{- range $key, $value := .Values.abc.env }}
- name: {{ $key }}
value: {{ $value | quote }}
{{- end }}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5431 次 |
| 最近记录: |