【发布时间】:2020-11-30 19:28:11
【问题描述】:
相关文档:https://helm.sh/docs/chart_template_guide/functions_and_pipelines/#using-the-lookup-function
我的掌舵版本:
$ helm version
version.BuildInfo{Version:"v3.4.1",
GitCommit:"c4e74854886b2efe3321e185578e6db9be0a6e29",
GitTreeState:"dirty", GoVersion:"go1.15.4"}
重现的最小示例:
- 创建一个新的 helm chart 并安装它。
$ helm create my-chart $ helm install my-chart ./my-chart - 创建一个简单的 ConfigMap。
升级现有图表,以便应用 ConfigMap。# my-chart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: my-configmap data: someKey: someValue$ helm upgrade my-chart ./my-chart - 确认 ConfigMap 存在。
按预期返回:$ kubectl -n default get configmap my-configmapNAME DATA AGE my-configmap 1 12m - 尝试使用
lookup函数来引用现有的ConfigMap。
然后进行升级的试运行。# my-chart/templates/configmap.yaml apiVersion: v1 kind: ConfigMap metadata: name: my-configmap data: someKey: someValue someOtherKey: {{ (lookup "v1" "ConfigMap" "default" "my-configmap").data.someValue }}
您将遇到一个 nil 指针错误:$ helm upgrade my-chart ./my-chart --dry-runError: UPGRADE FAILED: template: my-chart/templates/configmap.yaml:9:54: executing "my- chart/templates/configmap.yaml" at <"my-configmap">: nil pointer evaluating interface {}.someValue
我做错了什么?
【问题讨论】:
-
my-configmap是否保留在默认名称空间中? -
@SaikatChakrabortty 正确。
-
查找通常返回
map或nil,你能检查到.data或者可能没有.data,你得到了什么?只是为了调试。 -
没有
.data,查找返回map[]。但是每个键都是nil,所以.data.someKey会导致nil指针异常。
标签: kubernetes-helm