【问题标题】:Terraform HCL - Convert List to Map of Objects?Terraform HCL - 将列表转换为对象地图?
【发布时间】:2020-11-21 12:40:27
【问题描述】:

我有一个字符串列表,我需要将其转换为地图,以便稍后在其上执行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"
  }
}

【问题讨论】:

    标签: terraform hcl


    【解决方案1】:

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

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

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

    [{{}}]
    

    这是一个嵌套在 List 中的 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 迭代器映射键值对分配语法。

    【讨论】:

    • 谢谢,我缺少的是 => lambda 语法。
    猜你喜欢
    • 2021-08-10
    • 2021-04-09
    • 2019-06-09
    • 2019-12-05
    • 2020-11-17
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2021-03-18
    相关资源
    最近更新 更多