在 locals.tf 中,如果传递了 id,则尝试分配 pri 映射,而如果没有传递 id,则尝试传递 pub 映射。 pri 地图有 id 而 pub 地图没有,我如何将 pri/pub 分配给 fvar?
locals {
pub = {
(var.zname) = {
comment = var.zname
}
}
pri = {
(var.zname) = {
comment = var.zname
vpc = [{ id = var.ids }]
}
}
fvar = length(var.ids) != 0 ? local.pri : local.pub
}
执行上述操作会引发以下错误
│ Error: Inconsistent conditional result types
│
│ on .terraform/modules/hz/locals.tf line 14, in locals:
│ 14: fvar = length(var.ids) != 0 ? local.pri : local.pub
│ ├────────────────
│ │ local.pri is object with 1 attribute "dev.db"
│ │ local.pub is object with 1 attribute "dev.db"
│ │ var.ids is list of string with 1 element
│
│ The true and false result expressions must have consistent types. Type
│ mismatch for object attribute "dev.db": The 'true' value
│ includes object attribute "vpc", which is absent in the 'false' value.
有什么方法可以将差异映射传递给同一个变量(fvar)?
就像消息中所写的那样,
local.pub
和local.pri
有不同的类型。具体来说,您的 local.pub
缺少 vpc
属性,而您在 local.pri
中拥有该属性。在 bool 表达式中,您不能混合类型。 因此,您必须使它们具有相同的类型,即它们必须具有相同的属性。
您可以将空的
vpc
列表添加到您的 local.pub
来解决此问题:
locals {
pub = {
(var.zname) = {
comment = var.zname
vpc = []
}
}
pri = {
(var.zname) = {
comment = var.zname
vpc = [{ id = var.ids }]
}
}
fvar = length(var.ids) != 0 ? local.pri : local.pub
}