我有一个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"
}
}
...提供一些输出,例如...
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.yyy
(将是"YY.YY.YY.YY/PD"
)。
现在,我想提供一个额外的output
,使我的消费者能够一次获取所有产品或开发者CIDR作为列表,因此,对于prod_cidrs
,结果将是: / p>
["XX.XX.XX.XX/PD", "YY.YY.YY.YY/PD", "ZZ.ZZ.ZZ.ZZ/PD"]
如何在不修改当前locals
的情况下实现这一目标?
答案 0 :(得分:3)
如果直接查看module.my_module.dev_cidrs
输出,您会发现它是一个地图,您可以选择module.my_module.dev_cidrs.xxx
使用xxx
键并返回其值。
如果要获取prod_cidrs
的值列表,则可以只使用values
function。
模块的调用者可以自己这样做:
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
。