如何将块复制粘贴到动态块的内容中

How to copy-past block into content of dynamic block

列表

locals{
    x = [ {  yyy = { a=1 } }, {  yyy = { b=2 }  }   ]
}

我想将块 yyy“复制过去”到动态块的内容{}部分

   dynamic "test" {
      for_each = local.x
      content {
         zzz {x.yyy}
      }
   }

所以结果应该是

test{
  zzz {a=1}
}

test{
  zzz {b=2}
}

是否可以不手动处理每个字段:

  content {
     zzz {
        a=ifnotnull(x.yyy.a)  
        b=ifnotnull(x.yyy.b)  
     }
  }

您需要另一个 dynamic 用于内部块。

但是您必须在块中指定属性(名称)。所以假设 zzz 块中可能的属性是 ab,这样的事情应该有效:

dynamic "test" {
  for_each = local.x

  content {
    dynamic "zzz" {
      for_each = [test.value.yyy]

      content {
        a = lookup(zzz.value, "a", null)
        b = lookup(zzz.value, "b", null)
      }
    }
  }
}

请注意,不需要 yyy 映射,因此如果您控制输入数据的结构,它可以只是 x = [ { a=1 }, { b=2 } ],以及内部迭代器 for_each = [test.value]