动态舵图配置值的层次结构
Hierarchy of values for dynamic helm chart configuration
我想做什么
我想在values.yaml
中有一些默认设置和选项,然后是不同实例的哈希映射,这些实例将转换为服务和部署,其个别设置覆盖默认值。
values.yaml
someSetting: TheDefault
deployments:
one:
role: XYZ
two:
role: ABC
someSetting: Overridden
在上述情况下,将有两个部署和服务,one
和 two
。 one
的 someSetting
的值将是 TheDefault
而 two
的值将是 Overridden
.
actual template yaml
我正在尝试这个 - 构建一个字典,$p
,其中包含根作用域 Chart
和 Release
对象,然后合并根作用域值in,则将当前的部署值合并进来。
{{- 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
returns 没有错误,但 helm template .
(或干式 运行)产生:
Error: rendering template failed: runtime error: invalid memory address or nil pointer dereference
我试过的
- 删除每个
merge
以尝试缩小崩溃的范围 - 它们似乎不是导致崩溃的原因
- Plain-old 合并
$
到字典中
- 哭泣
- 询问 Helm Slack
- 询问 GitHub 问题
我的问题..
如何修复此崩溃?
或者,我怎样才能实现我想要的目标?
您可以改为使用默认值和原始服务和部署创建一个通用基本图表,然后创建一个包含基本图表两次的伞形图表,别名 'one' 和 'two'。然后伞图的值文件是您覆盖默认值的地方,您不需要任何字典。
这里的示例是基本图表 - https://github.com/ryandawsonuk/configmaps-transformers/tree/master/helm/transformers/charts/transformer and the umbrella chart includes it multiple times under different aliases - https://github.com/ryandawsonuk/configmaps-transformers/blob/master/helm/transformers/requirements.yaml. The umbrella chart's values file plugs in different values for each instance of the base chart that is included. In the umbrella values each instance is referenced by its alias - https://github.com/ryandawsonuk/configmaps-transformers/blob/master/helm/transformers/values.yaml#L14
试试这个:
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 -}}
我想做什么
我想在values.yaml
中有一些默认设置和选项,然后是不同实例的哈希映射,这些实例将转换为服务和部署,其个别设置覆盖默认值。
values.yaml
someSetting: TheDefault
deployments:
one:
role: XYZ
two:
role: ABC
someSetting: Overridden
在上述情况下,将有两个部署和服务,one
和 two
。 one
的 someSetting
的值将是 TheDefault
而 two
的值将是 Overridden
.
actual template yaml
我正在尝试这个 - 构建一个字典,$p
,其中包含根作用域 Chart
和 Release
对象,然后合并根作用域值in,则将当前的部署值合并进来。
{{- 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
returns 没有错误,但 helm template .
(或干式 运行)产生:
Error: rendering template failed: runtime error: invalid memory address or nil pointer dereference
我试过的
- 删除每个
merge
以尝试缩小崩溃的范围 - 它们似乎不是导致崩溃的原因 - Plain-old 合并
$
到字典中 - 哭泣
- 询问 Helm Slack
- 询问 GitHub 问题
我的问题..
如何修复此崩溃?
或者,我怎样才能实现我想要的目标?
您可以改为使用默认值和原始服务和部署创建一个通用基本图表,然后创建一个包含基本图表两次的伞形图表,别名 'one' 和 'two'。然后伞图的值文件是您覆盖默认值的地方,您不需要任何字典。
这里的示例是基本图表 - https://github.com/ryandawsonuk/configmaps-transformers/tree/master/helm/transformers/charts/transformer and the umbrella chart includes it multiple times under different aliases - https://github.com/ryandawsonuk/configmaps-transformers/blob/master/helm/transformers/requirements.yaml. The umbrella chart's values file plugs in different values for each instance of the base chart that is included. In the umbrella values each instance is referenced by its alias - https://github.com/ryandawsonuk/configmaps-transformers/blob/master/helm/transformers/values.yaml#L14
试试这个:
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 -}}