Terraform HCL-将列表转换为对象映射?

时间:2020-07-31 16:29:20

标签: terraform hcl

我有一个字符串列表,需要将其转换为映射,以便以后在对它执行jsonencode时不会创建数组。这是因为在json-schema中,properties: { ... }不是属性列表,而是实际上的映射。

因此,列表中的每个属性都应作为键值映射出现。其中的键是属性名称,值是另一个映射或对象{“ type” =“ string”}。

additional-properties = [
  for prop in local.prop-list:
    { prop = { "type" = "string" }}
]

我的第一次尝试最终是作为地图对象列表,而不是属性地图。

有更好的方法吗?

我的最终目标是能够在API网关模型的json模式中对此使用jsonencode-

"properties": {
  "prop1": {
    "type": "string"
  },
  "prop2": {
    "type": "string"
  }
}

1 个答案:

答案 0 :(得分:2)

当您将additional-properties的分配指定为:

[
  for prop in local.prop-list:
    { prop = { "type" = "string" }}
]

我们可以删除lambda和变量,以查看构造函数的结果类型为:

[{{}}]

这是列表内的嵌套Map。

由于您希望使用具有{ prop { type = string } }结构的嵌套Map,因此我们需要相应地指定构造函数:

additional-properties = { # outside map with "prop" key and map value
  for prop in local.prop-list:
    prop => { "type" = "string" } # nested map with "type" key and "string" value
}

还请注意从==>的更改,以获取正确的lambda迭代器映射键值对分配语法。