我尝试为EKS安装metric-server的helm图表:
resource "helm_release" "metrics-server" {
name = "metrics-server"
repository = "https://kubernetes-sigs.github.io/metrics-server/"
chart = "metrics-server"
namespace = "kube-system"
version = "3.10.0"
set {
name = "metrics.enabled"
value = false
}
set {
name = "args"
value = "--kubelet-insecure-tls"
}
}
并且在
terraform apply
之后出现此错误:
│ Error: template: metrics-server/templates/deployment.yaml:59:27: executing "metrics-server/templates/deployment.yaml" at <.Values.args>: range can't iterate over --kubelet-insecure-tls
│
│ with helm_release.metrics-server,
│ on alb-controller.tf line 72, in resource "helm_release" "metrics-server":
│ 72: resource "helm_release" "metrics-server" {
有没有办法通过 terraform 传递这个参数?
谢谢
此错误实际上是由 Helm 内的 Sprig 引发的,而不是由 Terraform 引发的,并且与 Helm 使用有关。这是因为 Helm 图表需要
list
类型的值,而传递的是 string
类型的值。但是,Terraform Helm 提供程序需要值的 string
类型,因此我们必须传递 string
,Helm 和 Sprig 将将其解释为 list
。更新用法以将类型 list
传递给 Helm:
set {
name = "args"
value = "['--kubelet-insecure-tls']"
}
顺便说一句,从错误消息来看,这似乎不太清楚,但错误消息的关键部分:
<.Values.args>:范围不能迭代...
强烈暗示(
range
函数,Values
)当输入后渲染 Helm 图表时,Sprig 模板引擎需要 list
类型。