首页 > 解决方案 > helm: 'lookup' 函数总是返回空地图

问题描述

相关文档: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"}

重现的最小示例:

  1. 创建一个新的 helm chart 并安装它。
    $ helm create my-chart
    $ helm install my-chart ./my-chart
    
  2. 创建一个简单的 ConfigMap。
    # my-chart/templates/configmap.yaml
    
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: my-configmap
    data:
      someKey: someValue
    
    升级现有图表,以便应用 ConfigMap。
    $ helm upgrade my-chart ./my-chart
    
  3. 确认 ConfigMap 存在。
    $ kubectl -n default get configmap my-configmap
    
    按预期返回:
    NAME           DATA   AGE
    my-configmap   1      12m
    
  4. 尝试使用该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 }}
    
    然后进行升级的试运行。
    $ helm upgrade my-chart ./my-chart --dry-run
    
    您将遇到一个 nil 指针错误:
    Error: UPGRADE FAILED: template: my-chart/templates/configmap.yaml:9:54: executing "my-
    chart/templates/configmap.yaml" at <"my-configmap">: nil pointer evaluating interface 
    {}.someValue
    

我究竟做错了什么?

标签: kubernetes-helm

解决方案


如果您使用--dry-run标志,这是预期的行为。

文档

请记住,Helm 不应该在 ahelm template或 a期间联系 Kubernetes API 服务器helm install|update|delete|rollback --dry-run,因此在这种情况下查找函数将返回一个空列表(即 dict)。


推荐阅读