地形。 true 和 false 结果表达式必须具有一致的类型

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

我正在为 AWS 和 Azure 使用一个 Terraform 文件。这取决于变量的值,我部署到AWS或Azure。对于解决方案,我使用“计数”。

但是在一个地方我遇到了问题。

对于AWS,在for_each构造中必须使用[],但对于azure我必须使用{}。

data "aws_subnet_ids" "selected_es" {
  count = local.current_provider == "aws" ? 1 : 0
  vpc_id = data.aws_vpc.selected_es[0].id
}

data "aws_subnet" "selected_es" {

  for_each = local.current_provider == "aws" ? data.aws_subnet_ids.selected_es[0].ids : []
  id       = each.value
}

我知道,在 AWS 的变体中,我有一个带有 IP 的数组。对于 Azure,我有另一种类型。但我不明白,我该如何解决我的问题。

一些描述。目前,仅当我对 Azure 和 AWS 使用单独的代码部分时才有效:
1 个变体。 local.current_provider = aws。
我们的“data.aws_subnet_ids.selected_es[0].ids”是数组。
在我的 foreach 中我必须使用

for_each = local.current_provider == "aws" ? data.aws_subnet_ids.selected_es[0].ids : []

2 变体。 local.current_provider = 天蓝色。
我们的“data.aws_subnet_ids.selected_es[0].ids”不是数组(因为数据源中的计数将为 0)。
在我的 foreach 中我必须使用

for_each = local.current_provider == "aws" ? data.aws_subnet_ids.selected_es[0].ids : {} 

但我想对 2 个变体使用一个代码。 我无法使用

data "aws_subnet" "selected_es" { 
  count local.current_provider == "aws" ?1:0 
  for_each = data.aws_subnet_ids.selected_es[0].ids 
  id = each.value 
} 
terraform devops
1个回答
0
投票

解决这个问题的方法是将值转换为字符串,这样 Terraform 就可以像这样运行:

jsondecode(local.current_provider == "aws" ? jsonencode([]) : jsonencode({}))
© www.soinside.com 2019 - 2024. All rights reserved.