【问题标题】:Terraform list object in GolangGolang 中的 Terraform 列表对象
【发布时间】:2020-07-31 00:33:16
【问题描述】:

我正在尝试在 Go 中表示 objects 的 Terraform 列表,即

variable "map_roles" {
  description = "Additional IAM roles to add to the aws-auth configmap."
  type = list(object({
    rolearn  = string
    username = string
    groups   = list(string)
  }))

rolearn 和其他基本类型还是复合类型,例如一张地图?那么 map_roles 只是一个字符串结构和字符串切片(列表),还是一个映射结构?

【问题讨论】:

  • 这不是 Go 语法,你到底在做什么?
  • 这是 terraform 语法。我试图在 Go 中表达这一点
  • 这取决于您使用的抽象级别。你能提供一个你想写的例子吗?
  • 我正在使用 terratest (github.com/gruntwork-io/terratest) 来测试 terraform 模块(eks 集群)。我需要提供的 input_variables 之一是 map_roles
  • 知道 terratest 的人可能会插话,但我猜它只是使用 []interface{}map[string]interface{} 的组合来保存变量数据。

标签: go terraform terratest


【解决方案1】:

Terratest 使用其内部函数toHclStringterraform.Options 中给出的变量值转换为-var 命令行参数。

通过阅读该函数及其调用的其他函数的实现,它似乎会将 Go []interface{} 值转换为 Terraform 元组语法,并将 Go map[string]interface{} 转换为 Terraform 对象语法,因此对于显示的类型约束可能如下所示:

[]interface{}{
    map[string]interface{}{
        "rolearn":  "foo",
        "username": "bar",
        "groups":   []interface{"baz"},
    },
    map[string]interface{}{
        "rolearn":  "boop",
        "username": "beep",
        "groups":   []interface{"blurp"},
    },
}

根据我对代码的阅读(注意:我实际上并没有测试它?),我希望生成一个像这样的-var 参数值:

-var map_roles='[{"rolearn" = "foo", "username" = "bar", "groups" = ["baz"]},{"rolearn" = "boop", "username" = "beep", "groups" = ["blurp"]}]'

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 2020-10-22
    • 2020-12-27
    • 2019-02-06
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 2021-09-20
    • 2020-03-01
    相关资源
    最近更新 更多