Helm 如何将复杂的 values.yaml 部分复制到配置映射中

问题描述

我有一个很大的 values.yaml 文件,其中包含嵌套对象和数组,我试图将其副本呈现为配置映射。到目前为止,我的代码是:

{{- range $key,$value := index .Values "program_config" }}
{{ $key }}
{{- range $elem,$elemVal := $value }}
{{- if kindis "invalid" $elemVal }}
{{ $elem }} = 
{{- else if kindis "string" $elemVal }}
{{ $elem }} = {{ tpl $elemVal $ }}
{{- else }}
{{ $elem }} = {{ $elemVal }}
{{- end }}
{{- end }}
{{- end }}

这让我很接近,但我看到地图渲染为

object_schema : map[type:UTF8]

代替

object_schema:
  type: "UTF8"

我的数组显示为:

queries :
0 : select xxx

代替:

queries:
 - >-
   select xxx

解决方法

经过几个小时的努力,我做到了:

{{- range $key,$value := index .Values "program_config" }}
    {{ $key }}:
    {{- range $elem,$elemVal := $value }}
      {{- if ne "queries" $key  }}
      {{- if ne "schema" $key  }}
      {{- if kindIs "invalid" $elemVal }}
      {{ $elem }}: {{ "" }}
      {{- else if kindIs "string" $elemVal }}
      {{ $elem }}: {{ tpl $elemVal $ | quote}}
      {{- else }}
      {{ $elem }}: {{ quote $elemVal }}
      {{- end }}
      {{- end }}
      {{- end }}
      {{- if eq "queries" $key  }}
      - >-
        {{ $elemVal }}
      {{- end}}
    {{- end }}
{{- end }}
{{- range $key,$value := index .Values.program_config.schema}}
      {{ $key }}: 
      {{- range $nestedKey,$nestedVal := index $value }}
        {{ $nestedKey }} : {{ $nestedVal | quote }}
      {{- end }}   
{{- end }}