如何将字符串列表传递到helm_releasevalues.yaml文件?

问题描述 投票:0回答:1

我正在尝试将字符串列表传递给这样的头盔模板:

ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
...
  annotations:
    alb.ingress.kubernetes.io/subnets: {{ .Values.alb.subnets }}
...

values.yaml

alb:
  subnets: 
    - subnet-A
    - subnet-B

主.tf

resource "helm_release" "site_ui" {
  name  = "site-ui"
  chart = "./charts/site-ui"
  values = [
    file("./charts/site-ui/values.yaml")
  ]
  reuse_values = true

  set_list {
    name  = "alb.subnets"
    value = var.data_subnet_ids
  }
}

变量.tf

variable "data_subnet_ids" {
  type    = list(string)
  default = ["subnet-A", "subnet-B"]
}

地形计划:

# helm_release.site_ui will be updated in-place
  ~ resource "helm_release" "site_ui" {
        id                         = "site-ui"
      ...
        name                       = "site-ui"
      ~ values                     = [
          ...
        # (25 unchanged attributes hidden)

     ...
      + set_list {
          + name  = "alb.subnets"
          + value = [
              + "subnet-A",
              + "subnet-B",
            ]
        }

        # (4 unchanged blocks hidden)
    }

Plan: 0 to add, 1 to change, 0 to destroy.

当我尝试部署上述代码时,出现此错误:

helm_release.site_ui: Modifying... [id=site-ui]
╷
│ Error: YAML parse error on foreseer-ui/templates/ingress.yaml: error unmarshaling JSON: while decoding JSON: json: cannot unmarshal array into Go struct field .metadata.annotations of type string
│ 
│   with helm_release.site_ui,
│   on main.tf line 27, in resource "helm_release" "site_ui":
│   27: resource "helm_release" "site_ui" {
│ 

根据文档

alb.ingress.kubernetes.io/subnets
应该是
stringList
类型(请参阅https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.1/guide/ingress/annotations/

我错过了什么?

terraform yaml kubernetes-helm go-templates terraform-helm-provider
1个回答
0
投票

该错误与 TF 或 Helm 无关。

metadata.annotations
的模式需要一个字符串值,因为它是反序列化的 Go 结构中指定的类型,并且 Sprig 会从 YAML 数组/HCL2 列表呈现为列表类型。您需要将多个子网指定为字符串。文档描述该字符串应该以逗号分隔,因此呈现的值应该以逗号分隔子网:

alb.ingress.kubernetes.io/subnets: {{ .Values.alb.subnets  | join ", " }}

其中 Sprig

join
函数将列表加入到由
, 
分隔的子网中。

© www.soinside.com 2019 - 2024. All rights reserved.