Terraform helm 设置数组类型的值

Pri*_*a25 3 parsing escaping terraform kubernetes-helm

当我从 TF 代码中为 helm_release 资源设置数组值时,如下所示:

set {
    name  = "ObjectIds"
    value = "{${join(",", local.rbac_config.group_oid_list)}}"
}
Run Code Online (Sandbox Code Playgroud)

我的 TF 计划显示正在传递的值,如下所示:

+ set {
      + name  = "ObjectIds"
      + value = "{"Id1-xxxxxxxxxxx,Id2-yyyyyyyyyyyyyyyyyyy,Id3-zzzzzzzzzzzzzzzz"}"
    }
Run Code Online (Sandbox Code Playgroud)

为什么我需要这样的格式?

当使用 手动从命令行安装 helm 图表时helm install,如果我指定,它会抛出错误--set ObjectIds={Id1-xxxxxxxx,Id2-yyyyyyyy,Id3-zzzzzz}

头盔错误Error: This command needs 2 arguments: release name, chart path

修复:当我指定 时它工作得很好--set ObjectIds={"Id1-xxxxxxxx,Id2-yyyyyyyy,Id3-zzzzzz"}。所以我希望 Terraform 代码将值解析为value = "{"Id1-xxxxxxxx,Id2-yyyyyyyy,Id3-zzzzzz"}"而不是value = "{Id1-xxxxxxxx,Id2-yyyyyyyy,Id3-zzzzzz}"

我尝试过的事情:

1. 不起作用:

set {
    name  = "ObjectIds"
    value = "{\"${join(",", local.rbac_config.group_oid_list)}\"}"
}
Run Code Online (Sandbox Code Playgroud)

失败/错误:TF Plan 将值解析为

+ value = "{\"Id1-xxxxxxxx,Id2-yyyyyyyy,Id3-zzzzzz\"}"
Run Code Online (Sandbox Code Playgroud)

2. 不起作用:

set {
    name  = "ObjectIds"
    value = format("\"%s\"", join(",", local.rbac_config.group_oid_list))
}
Run Code Online (Sandbox Code Playgroud)

失败/错误: TF Plan 将值解析为

+ value = "{\"Id1-xxxxxxxx,Id2-yyyyyyyy,Id3-zzzzzz\"}"
Run Code Online (Sandbox Code Playgroud)

有什么建议我如何让它发挥作用吗?

小智 5

我知道这是一个老问题,但是当你有变量时,你可以使用动态集:

dynamic set {
    for_each = var.sample_array
    content {
      name = "object[${set.key}]"
      value = set.value
    }
  }
Run Code Online (Sandbox Code Playgroud)