我想在values.yaml
中有一些默认设置和选项,然后是不同实例的哈希图,这些哈希图将转换为服务和部署,其各个设置将覆盖默认设置。
values.yaml
someSetting: TheDefault
deployments:
one:
role: XYZ
two:
role: ABC
someSetting: Overridden
在上述情况下,将有两个部署和服务one
和two
。 someSetting
的{{1}}的值为one
,TheDefault
的值为two
。
Overridden
我正在尝试-建立一个字典actual template yaml
,其中有根范围$p
和Chart
对象,然后合并了根范围值,然后合并当前的部署值。
Release
包含{{- range $deploymentKey, $deploymentVal := .Values.deployments }}
{{- $p := dict "deploymentKey" $deploymentKey }}
{{- $_ := set $p "Chart" $.Chart }}
{{- $_ := set $p "Release" $.Release }}
{{- $_ := merge $p $.Values }}
{{- $_ := merge $p . }}
...
{{- end }}
和Chart
的原因是,尽管文档中有说明,Release
并不总是可用-当我将范围传递给模板时,它实际上是空的,并且模板尝试使用$.Chart
引用根范围。
所以我正在做类似的事情:
$.
和
name: {{ template "my-app.fullname" $p }}
问题在于,尽管image: {{ $p.image.name }}
不返回错误,但helm lint
(或空运行)会产生:
helm template .
Error: rendering template failed: runtime error: invalid memory address or nil pointer dereference
来缩小崩溃的范围-他们似乎并没有造成崩溃merge
合并到字典中如何解决此崩溃?
或者,如何实现我要达到的目标?
答案 0 :(得分:1)
尝试一下:
deployment.yaml:
{{- range $deploymentKey, $deploymentVal := .Values.deployments }}
{{- $p := dict "deploymentKey" $deploymentKey }}
{{- $_ := set $p "Chart" $.Chart }}
{{- $_ := set $p "Release" $.Release }}
{{- $_ := merge $p . }}
{{- $_ := merge $p $.Values }}
...
{{ end }}
_helpers.tpl:
{{- define "repro.fullname" -}}
{{- printf "%s" .Chart.Name }}
{{- end -}}
答案 1 :(得分:0)
您可以改为使用默认值以及有效的服务和部署来创建通用基础图,然后创建一个包含该基础图的别名为“ one”和“ two”两次的总括图。然后,伞形图的值文件将覆盖默认值,并且您不需要任何字典。
作为示例,这里是一个基础图表-https://github.com/ryandawsonuk/configmaps-transformers/tree/master/helm/transformers/charts/transformer,而伞形图表在不同的别名-https://github.com/ryandawsonuk/configmaps-transformers/blob/master/helm/transformers/requirements.yaml下多次包含该基础图表。伞形图的值文件为包含的基本图的每个实例插入不同的值。在保护伞值中,每个实例均通过其别名-https://github.com/ryandawsonuk/configmaps-transformers/blob/master/helm/transformers/values.yaml#L14
进行引用