【问题标题】:helm: 'lookup' function always returns empty maphelm: 'lookup' 函数总是返回空地图
【发布时间】: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"}

重现的最小示例:

  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
    

我做错了什么?

【问题讨论】:

  • my-configmap 是否保留在默认名称空间中?
  • @SaikatChakrabortty 正确。
  • 查找通常返回mapnil,你能检查到.data 或者可能没有.data,你得到了什么?只是为了调试。
  • 没有.data,查找返回map[]。但是每个键都是nil,所以.data.someKey会导致nil指针异常。

标签: kubernetes-helm


【解决方案1】:

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

来自documentation

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

【讨论】:

  • 这是否与弃用kubectl apply --dry-run 支持kubectl apply --dry-run=clientkubectl apply --dry-run=server 有关?在 helm 允许在试运行期间联系服务器之前,此 lookup 命令对我没有用,因为我的 CI/CD 需要在...“湿”运行之前通过试运行。
  • --dry-run:github.com/helm/helm/issues/8137 下查看关于何时可用的讨论
猜你喜欢
  • 1970-01-01
  • 2018-02-03
  • 2018-08-27
  • 2019-04-15
  • 2021-10-14
  • 2019-12-02
  • 2021-11-16
  • 2017-11-01
相关资源
最近更新 更多