尝试评估缺失的嵌套键时,Helm 图表失败,并显示“nil 指针评估接口 {}”

2024-02-23

我正在编写一个 Helm 3 库图表,并希望创建一个具有默认值的 YAML。但是,当尝试设置默认值时nestedkey 不存在,Helm 失败并显示以下错误消息:

nil pointer evaluating interface {}

假设我的 Kubernetes 对象中有以下代码片段:

{{- if eq (.Values.deployment.scale.type | default "static") "static" }}
  replicas: {{ default "3" .Values.deployment.scale.replicas }}
{{- end }}

If .Values.deployment.scale定义后,模板将呈现良好,并且值replicas将会是 3 即使.Values.deployment.scale.replicas没有定义。

但是,如果未定义父键之一,Helm 将失败并显示上述错误消息。例如如果values.yaml如下:

# values.yaml
deployment:
  not_scale: {}

渲染将失败并显示:nil pointer evaluating interface {}.scale

即使其父键未定义,如何为嵌套键设置默认值?


我不认为,你可以为这种情况设置默认值。您需要预先检查是否scale字段存在。为此,您可以使用hasKey小枝的功能 https://github.com/Masterminds/sprig/blob/bd7cb37b66a3bf86016d09188a371c36e5a63f21/docs/dicts.md:

{{- if hasKey .Values.deployment "scale" }}
{{- if eq (.Values.deployment.scale.type | default "static") "static" }}
replicas: {{ default "3" .Values.deployment.scale.replicas }}
{{- end }}
{{- else }}
replicas: 3
{{- end }}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试评估缺失的嵌套键时,Helm 图表失败,并显示“nil 指针评估接口 {}” 的相关文章

  • Rabbit mq - 等待 Mnesia 表时出错

    我已经在 Kubernetes 集群上使用 Helm Chart 安装了 RabbitMQ rabbitmq pod不断重新启动 在检查 pod 日志时 我收到以下错误 2020 02 26 04 42 31 582 warning lt
  • Golang中按长度分割字符串

    有谁知道如何在 Golang 中按长度分割字符串 例如 每 3 个字符分割 helloworld 那么理想情况下它应该返回一个 hel low orl d 数组 或者 一个可能的解决方案是在每 3 个字符后附加一个换行符 所有的想法都非常感
  • 为什么 json.Unmarshal 返回映射而不是预期的结构?

    看看这个游乐场 http play golang org p dWku6SPqj5 http play golang org p dWku6SPqj5 基本上 我正在工作的图书馆收到了interface 作为参数 然后需要json Unma
  • 直接从一个通道发送到另一个通道

    当从一个通道直接发送到另一个通道时 我偶然发现了令人惊讶的行为 package main import fmt func main my chan make chan string chan of chans make chan chan
  • 在 Visual Studio Code 中调试 Go 测试

    在我的 Windows 计算机上 我安装了 Visual Studio Code 要手动运行测试 我进入控制台到项目文件夹并输入 go test main test go 它工作完美 但我遇到一种情况 我需要调试我的测试以了解发生了什么 为
  • 错误:标准包中非标准导入“gopkg.in/yaml.v2”

    我正在尝试从以下位置导入 go yamlhttps github com go yaml yaml https github com go yaml yaml 并且我发现了一个 Google 没有提供帮助的错误 I ran go get g
  • 使用 mgo 驱动程序进行 mongo 聚合查询

    我在 mongodb 中有以下查询 db devices aggregate match userId v73TuQqZykbxFXsWo state true project userId 1 categorySlug 1 weight
  • 在复杂的文件夹结构中进行测试

    我正在 golang 中构建一个设计模式存储库 为了运行所有测试 我使用这个 bash 脚本 有用 bin bash go test creational abstract factory go go test creational bui
  • 当使用 k8s.io/client-go 库的 kubernetes 部署发生更改时获得通知的最佳方式是什么?

    Context 我正在编写一个使用k8s io client go https github com kubernetes client go 图书馆 这里是 godocs https godoc org k8s io client go
  • 有没有办法间歇性地执行重复性任务?

    有没有办法在 Go 中执行重复的后台任务 我在想类似的事情Timer schedule task delay period 在爪哇 我知道我可以用 goroutine 来做到这一点Time sleep 但我想要一些容易停止的东西 这是我得到
  • 关闭长度未知的通道

    当不了解频道时我无法关闭频道 length package main import fmt time func gen ch chan int var i int for time Sleep time Millisecond 10 ch
  • 有没有办法从另一个包访问结构体的私有字段?

    我在一个包中有一个具有私有字段的结构 package foo type Foo struct x int y Foo 另一个包 例如 白盒测试包 需要访问它们 package bar import foo func change foo f
  • 关于编写惯用的 Golang 的建议

    我正在掌握 Golang 的做事方式 首先是一些示例代码 package main import log os func logIt s string f os OpenFile errors log os O RDWR os O CREA
  • 为什么 DER ASN.1 大整数的解组在 Golang 中仅限于 SEQUENCE?

    我希望能够使用encoding asn1 包从 DER 文件中解组一个大整数 但它看起来只适用于整数序列 例如 这不起作用 这很奇怪 因为 Big Int 的编组效果很好 https play golang org p Wkj0jAA6bp
  • Golang const unsafe.Sizeof

    不明白为什么我可以做到 const OK uint64 0 const OK int unsafe Sizeof uint64 0 但不是这个 const NOK binary Size uint64 0 它的解释在规格 https gol
  • 如何通过在切片上查找来从切片复制到数组

    我正在编写一个库来处理二进制格式 我有一个带有数组变量的结构 我想保留它以用于文档目的 我还需要从输入字节片中查找和判断 一些伪代码 type foo struct boo 5 byte coo 3 byte func main input
  • 子字符串和 Go 垃圾收集器

    在 Go 中获取字符串的子字符串时 不会分配新的内存 相反 子字符串的底层表示包含一个数据指针 该指针是原始字符串的数据指针的偏移量 这意味着 如果我有一个大字符串并希望跟踪一个小子字符串 则垃圾收集器将无法释放任何大字符串 直到我释放对较
  • 从我的应用程序 Helm 图表配置第三方 Helm 图表

    我似乎在任何地方都找不到任何关于此的明确信息 但是 Helm 图表中是否有可能需要第三方 例如stable jenkins 并指定配置值 我看到的所有示例都是为了运行helm install直接命令 但我希望能够将其配置为我的应用程序的一部
  • Golang:如何在HTTP客户端的TLS配置中指定证书

    我有一个证书文件 该位置是 usr abc my crt我想将该证书用于我的 tls 配置 以便我的 http 客户端在与其他服务器通信时使用该证书 我当前的代码如下 mTLSConfig tls Config CipherSuites u
  • []interface{}{} 中的双大括号是什么意思

    请注意 这是格式为 的双花括号 而不是嵌套花括号 我也不确定这是空接口问题 切片问题还是结构问题 我猜它至少是其中两个的组合 我正在学习 Golang 并且已经达到了空接口 我发现我需要将空接口声明为 interface 或者例如 inte

随机推荐