0

我有一个包含以下内容的基本模块:

locals {
  common_tags = {
    Name          = var.name
    AssetID       = var.AssetID
    AssetName     = var.AssetName
    AssetGroup    = var.AssetGroup
    AssetPurpose  = var.AssetPurpose
    AssetProgram  = var.AssetProgram
    AssetSchedule = var.AssetSchedule
  }
}

output "Tags" {
  value = local.common_tags
}

在我的其他模块中,我通过导入模块并引用它来使用这些标签 - 即。

module "base" {
  source = "../base"
}

resource "aws_ecs_cluster" "ecs_cluster" {
  name  = "my_cluster"
  tags = module.base.Tags
}

现在对于其中一个资源,我需要做同样的事情并使用除一个之外的大多数标签,这将是不同的,即。

resource "aws_subnet" "private_subnet" {
  count             = length(var.aws_zones)
  vpc_id            = aws_vpc.vpc.id
  availability_zone = element(var.aws_zones, count.index)
  cidr_block        = element(var.private_subnets, count.index)
  tags = {
    Name          = "private-${var.name}-${element(var.aws_zones, count.index)}"  
    AssetID       = var.AssetID
    AssetName     = var.AssetName
    AssetGroup    = var.AssetGroup
    AssetPurpose  = var.AssetPurpose
    AssetProgram  = var.AssetProgram
    AssetSchedule = var.AssetSchedule
  }
}

有没有一种方法可以做到这一点,而不必重建整个对象并且不必引用基本模块中的所有这些变量?

4

1 回答 1

1

这是合并功能的理想情况:

resource "aws_subnet" "private_subnet" {
  count             = length(var.aws_zones)
  vpc_id            = aws_vpc.vpc.id
  availability_zone = element(var.aws_zones, count.index)
  cidr_block        = element(var.private_subnets, count.index)
  tags = merge(module.base.tags, {
    Name          = "private-${var.name}-${element(var.aws_zones, count.index)}"  
  })
}

merge接受任意数量的地图并返回一个地图,其中包含来自所有地图的合并元素集。

于 2020-06-23T21:58:40.380 回答