在条件评估中分配不同类型的映射时出错

问题描述 投票:0回答:1

在 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)?

terraform
1个回答
3
投票

就像消息中所写的那样,

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
}
© www.soinside.com 2019 - 2024. All rights reserved.