动态舵图配置的值的层次结构

时间:2019-01-04 08:52:01

标签: kubernetes-helm

我要做什么

我想在values.yaml中有一些默认设置和选项,然后是不同实例的哈希图,这些哈希图将转换为服务和部署,其各个设置将覆盖默认设置。

values.yaml

someSetting: TheDefault
deployments:
  one:
    role: XYZ
  two:
    role: ABC
    someSetting: Overridden

在上述情况下,将有两个部署和服务onetwosomeSetting的{​​{1}}的值为oneTheDefault的值为two

Overridden

我正在尝试-建立一个字典actual template yaml,其中有根范围$pChart对象,然后合并了根范围值,然后合并当前的部署值。

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合并到字典中
  • 哭泣
  • 要求头盔松弛
  • 询问GitHub问题

我的问题。

如何解决此崩溃?

或者,如何实现我要达到的目标?

2 个答案:

答案 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

进行引用