代码之家  ›  专栏  ›  技术社区  ›  Kieren Johnstone

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

  •  0
  • Kieren Johnstone  · 技术社区  · 7 年前

    我想做什么

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

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

    在上述情况下,将有两个部署和服务, one two . 价值 someSetting 对于 会是 TheDefault 以及 会是 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 $. 引用根范围。

    所以我在做一些事情,比如:

    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 试图缩小撞车的范围——他们似乎并没有造成撞车
    • 普通旧合并 $ 查字典
    • 哭泣
    • 询问舵手是否松弛

    我的问题。。

    我怎样才能修复这个崩溃?

    或者,我怎样才能实现我想要的?

    2 回复  |  直到 7 年前
        1
  •  3
  •   Maor Friedman    7 年前

    试试这个:

    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 -}}
    
        2
  •  2
  •   Ryan Dawson    7 年前

    您可以创建一个带有默认值和普通服务和部署的公共基础图,然后创建一个伞形图,其中包括两个别名“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