在Helm模板中使用lookup获取ConfigMap内嵌套YAML的指定字段值
问题原因
你遇到的报错和取值失败是两个独立问题导致的:
- 通过
get $configmap.data "test.yml"拿到的内容是纯文本YAML字符串,不是可直接点取属性的结构化对象,需要先反序列化 - Go模板(Helm模板基于Go模板实现)不支持直接用
.数字开头的键名这种写法访问属性,数字开头的键必须用index函数取值
正确实现代码
apiVersion: v1 kind: ConfigMap metadata: name: test-config data: {{- $configmap := (lookup "v1" "ConfigMap" "default" "myconfig") }} {{- if $configmap }} {{- /* 把test.yml的字符串反序列化为结构化对象 */}} {{- $models := get $configmap.data "test.yml" | fromYaml }} {{- /* 用index函数取数字开头的键,再获取Version属性 */}} version: {{ index $models.map_a "123v1" | get "Version" }} {{- end }}
补充注意事项
helm template命令默认不会连接Kubernetes APIServer,此时lookup函数永远返回空值,如果你需要本地验证效果,需要改用以下命令:
helm install --dry-run=server test-release .
这个命令会和集群APIServer交互,正常拿到已存在的ConfigMap内容。
内容的提问来源于stack exchange,提问作者qxing
相关产品推荐
相关产品推荐

