【问题标题】:Dynamic map creation in terraformterraform 中的动态地图创建
【发布时间】:2020-09-08 05:14:38
【问题描述】:

我有一个作为变量传递的地图

dummy = {
  1 = {
    instances = {
      "ip1" = {
        a = "earth"
        b = "hi"
        c = 1
      }
      "ip2" = {
        a = "world"
        b = "hello"
        c = 2
      }
      "ip3" = {
        a = "planet"
        b = "hey"
        c = 3
      }
    }
  }
}

现在我想构建一个如下的地图

value = {
  "ip1" = {
    b = "hi"
    c = 1
  }
  "ip2" = {
    b = "hello"
    c = 2
  }
  "ip3" = {
    b = "hey"
    c = 3
  }
}

我尝试使用 for 循环,但似乎没有任何效果 以下是我尝试过的方法

_meta = {
  for instance in var.dummy.1.instances:
    (instance.key) = {
      b = instance.value.b
      c = instance.value.c
    }
}

但它说我无法使用迭代变量访问密钥

【问题讨论】:

  • (instance.key) 应该是 instance.key。修复后会出现什么错误?
  • @MattSchuchard 错误:test.tf 第 12 行的“for”表达式无效,在资源“consul_keys”“app”中:10:11:12:instance.key = { 13:14:15: 16:构建对象时需要key表达式。错误:test.tf 第 12 行的“for”表达式无效,在资源“consul_keys”“app”中:10: 11: 12: instance.key = {“for”表达式结束后的额外字符。
  • 由于这是一个嵌套的map,所以还需要将外部表达式也包含在{}中,所以{ instance.key = ... }}

标签: terraform terraform0.12+


【解决方案1】:
_meta = {
  for key, instance in var.dummy.1.instances:
    key => {
      b = instance.b
      c = instance.c
    }
}

for 表达式与 for_each 有点不同。您不会在 for 表达式中获得 keyvalue 变量,您可以使用 key, value 从地图中显式提取整个条目,如上所示在地图中作为表达形式。

您还需要在生成的映射条目的键和值之间使用粗箭头=> 运算符。

【讨论】:

    猜你喜欢
    • 2021-07-10
    • 1970-01-01
    • 2022-01-14
    • 2021-12-31
    • 2020-10-16
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多