Helm模板传递字典列表至pluck函数时遇类型错误求助
解决Helm模板中pluck函数的类型错误问题
问题原因
你用values .Values.base_dict得到的是字典切片([]interface{}),但pluck函数的调用格式是pluck "key" map1 map2 ...——它需要接收多个独立的字典参数,而非一个切片。直接把切片传给pluck会被当成单个map参数,触发类型不匹配的错误。
两种可行解法
解法1:用切片展开操作符...
先把values返回的切片赋值给变量,再通过...将切片展开为多个独立参数传给pluck:
# configmap.yaml 中的模板代码 {{- $dictList := values .Values.base_dict -}} {{- pluck "some-setting" $dictList... | join "," -}}
这个写法会把切片里的每个字典单独传给pluck,最终得到你预期的potato,spud或spud,potato(顺序取决于values返回的字典顺序,Helm 3中map的遍历顺序是稳定的)。
解法2:用range遍历收集值
如果对切片展开不太熟悉,也可以通过range遍历字典切片,手动收集some-setting的值再拼接:
# configmap.yaml 中的模板代码 {{- $settings := list -}} {{- range $item := values .Values.base_dict -}} {{- $settings = append $settings $item.some-setting -}} {{- end -}} {{- join "," $settings -}}
验证你的values.yaml结构
确保你的values.yaml中base_dict是键值对形式的字典(而非列表),比如:
# values.yaml base_dict: first: some-setting: potato second: some-setting: spud
values函数会把这个字典的所有值提取成切片,也就是[{"some-setting": "potato"}, {"some-setting": "spud"}],这是两种解法能生效的前提。
内容的提问来源于stack exchange,提问作者Andrew Kettmann
相关产品推荐
相关产品推荐

