Helm模板试图传递一个字典列表给pluck



我想我对流水线之类的东西在helm/golang模板中的工作方式有误解。执掌版本:

version.BuildInfo{Version:"v3.5.2", GitCommit:"167aac70832d3a384f65f9745335e9fb40169dc2", GitTreeState:"dirty", GoVersion:"go1.15.7"}

给定values.yaml:

base_dict:
one-thing:
some-setting: potato
two-thing:
some-setting: spud

和configmap.yaml:

apiVersion: v1
kind: ConfigMap
metadata:
name: some-map
data:
my_setting: {{ values .Values.base_dict | pluck "some-setting" | join "," }}
{{/*  my_setting2: {{ pluck "some-setting" (values .Values.base_dict) | join "," }}*/}}

我的期望是my_setting将是:potato,spudspud,potato,但相反,我得到一个错误:

helm.go:81: [debug] template: /path/to/file:6:50: executing "/path/to/file" at <"some-setting">: wrong type for value; expected map[string]interface {}; got []interface {}

它似乎期望多个字典而不是一个字典列表,但我不确定如何为pluck扩展这个?

最终目标是从字典列表中获得some_setting(由于在helm变量名称中- vs _而从原始名称更改),并且为了实现该目标,我在_helpers.tpl中创建了一个助手:

{{/*Used to make yaml to feed to fromYaml so we can make a json list in helm */}}
{{- define "some-chart.yaml-translator" }}
stuff:
{{- range $key, $value := . }}
- {{ $value.some_setting }}
{{- end }}
{{- end }}

然后在我的模板中:

{{- $agg_dict := include "some-chart.yaml-translator" .Values.base_dict | fromYaml }}
{{- $agg_json := get $agg_dict "lp_names" | toPrettyJson | quote }}

澄清一下,这是一些相当垃圾的东西,但这是我能想到的最好的东西。当然愿意考虑其他选择!

最新更新