我在变量上设置了动态块。
dynamic "settings" {
for_each = var.settings
content {
id = lookup(settings.value, "id", null)
...
}
}
但是从调用模块来看,settings
不一定总是存在,有时会直接传递null
。
settings = null
然而,当这种情况发生时,我在计划时得到跟踪。
var.settings is null
Cannot use a null value in for_each.
所以基本上,我只想在settings
不是null
时动态生成块。我怎样才能最好地解决这个问题?
在这种情况下,您通常不希望将list
或map
类型变量分配给null
以指定未定义的值。您可能希望对list
使用空构造函数[]
,而对map
使用空构造函数{}
。这将给你你想要的行为和促进干净的代码。
如果你真的想将null
赋值给非string
或number
类型,那么你可以使用空合并模式的coalesce函数(一些语言提供了操作符;例如JS中的?:
):
for_each = coalesce(var.settings, [])
,这会给你想要的行为。请注意,它基本上添加了另一层来使用空构造函数作为备份/默认值,这是在答案开头建议的最佳实践模式。