kubernetes-helm - 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"}
重现的最小示例:
- 创建一个新的 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-configmap
NAME 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-run
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
我究竟做错了什么?
解决方案
如果您使用--dry-run
标志,这是预期的行为。
从文档
请记住,Helm 不应该在 a
helm template
或 a期间联系 Kubernetes API 服务器helm install|update|delete|rollback --dry-run
,因此在这种情况下查找函数将返回一个空列表(即 dict)。
推荐阅读
- java - 如何在 Androidx 中更改首选项的文本颜色
- python - 刮痧。我无法在我的解析方法中发出请求以抓取另一个页面,也无法从脚本运行抓取工具
- css - 是否可以仅使用一个 div 在一个 css 部分中创建 2 个不同的形状?
- javascript - 使用 JavaScript 将 margin-top 设置为页面的高度
- vba - 使用 VBA 以编程方式查找和替换注册表项值
- json - 究竟什么时候使用 package-lock.json?
- c++ - 使用 && 运算符连接折叠/可变参数表达式的输出
- nlp - PolyAnalyst:分类法的关键字选项卡是如何计算的?
- performance - Qt - 如何在 QTableWidget 中有效地添加大量单元格?
- javascript - Sequelize 为 Postgres 'timestamp with time zone' 列返回 null