Terraform 0.12语法,用于将本地映射转换为列表输出

Terraform 0.12语法,用于将本地映射转换为列表输出,terraform,Terraform,我有一个地形模块,上面有一张这样的本地地图 locals { prod_cidrs = { xxx = "XX.XX.XX.XX/DV" yyy = "YY.YY.YY.YY/DV" zzz = "ZZ.ZZ.ZZ.ZZ/DV" } dev_cidrs = { xxx = "XX.XX.XX.XX/PD" yyy = "YY.YY.YY.YY/PD" zzz = "ZZ.ZZ.ZZ.ZZ/PD" } } …提供一些输出,如 out

我有一个地形模块,上面有一张这样的本地地图

locals {
  prod_cidrs = {
    xxx = "XX.XX.XX.XX/DV"
    yyy = "YY.YY.YY.YY/DV"
    zzz = "ZZ.ZZ.ZZ.ZZ/DV"
  }
  dev_cidrs = {
    xxx = "XX.XX.XX.XX/PD"
    yyy = "YY.YY.YY.YY/PD"
    zzz = "ZZ.ZZ.ZZ.ZZ/PD"
  }
}
…提供一些输出,如

output "prod_cidrs" {
  value = local.prod_cidrs
}

output "dev_cidrs" {
  value = local.dev_cidrs
}
因此,消费者可以在其余组合中获取module.my_module.dev_cidrs.xxx或XX.XX.XX.XX/DV或module.my_module.prod_cidrs.YY或YY.YY.YY/PD

现在,我想提供一个额外的输出,让我的消费者能够一次获取所有产品或开发CIDR作为列表,因此结果将是,例如,对于产品CIDR:

[XX.XX.XX.XX/PD,YY.YY.YY/PD,ZZ.ZZ.ZZ/PD]

如何在不修改我的当前局部变量的情况下实现这一点?

如果直接查看module.my_module.dev_cidrs输出,您将看到它是一个映射,允许您选择module.my_module.dev_cidrs.xxx使用xxx键并返回其值

如果您想要产品CIDR的值列表,则可以使用

模块的调用者可以自己这样做:

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

output "dev_x" {
  value = module.foo.dev_cidrs.xxx
}

output "all_prod_map" {
  value = module.foo.prod_cidrs
}

output "all_prod_list" {
  value = values(module.foo.prod_cidrs)
}
或者,您可以向模块中添加额外的输出:

locals {
  prod_cidrs = {
    xxx = "XX.XX.XX.XX/DV"
    yyy = "YY.YY.YY.YY/DV"
    zzz = "ZZ.ZZ.ZZ.ZZ/DV"
  }
  dev_cidrs = {
    xxx = "XX.XX.XX.XX/PD"
    yyy = "YY.YY.YY.YY/PD"
    zzz = "ZZ.ZZ.ZZ.ZZ/PD"
  }
}

output "prod_cidrs" {
  value = local.prod_cidrs
}

output "dev_cidrs" {
  value = local.dev_cidrs
}

output "all_prod_cidrs" {
  value = values(local.prod_cidrs)
}
然后他们可以将其用作module.foo.all_prod_cidrs。

如果您直接查看module.my_module.dev_cidrs输出,您将看到它是一个映射,允许您选择module.my_module.dev_cidrs.xxx使用xxx键并返回其值

如果您想要产品CIDR的值列表,则可以使用

模块的调用者可以自己这样做:

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

output "dev_x" {
  value = module.foo.dev_cidrs.xxx
}

output "all_prod_map" {
  value = module.foo.prod_cidrs
}

output "all_prod_list" {
  value = values(module.foo.prod_cidrs)
}
或者,您可以向模块中添加额外的输出:

locals {
  prod_cidrs = {
    xxx = "XX.XX.XX.XX/DV"
    yyy = "YY.YY.YY.YY/DV"
    zzz = "ZZ.ZZ.ZZ.ZZ/DV"
  }
  dev_cidrs = {
    xxx = "XX.XX.XX.XX/PD"
    yyy = "YY.YY.YY.YY/PD"
    zzz = "ZZ.ZZ.ZZ.ZZ/PD"
  }
}

output "prod_cidrs" {
  value = local.prod_cidrs
}

output "dev_cidrs" {
  value = local.dev_cidrs
}

output "all_prod_cidrs" {
  value = values(local.prod_cidrs)
}
然后他们可以将其用作module.foo.all\u prod\u cidrs