添加类似于Python的psuedo代码来解释我想通过Terraform实现什么。
我有6个传输网关路由表,10个传输网关VPN附件,我需要这个作为tansit网关路由表的关联和传播。
试图创建一个可以在资源函数aws_ec2_transit_gateway_route_table_association中引用的本地 "map/dict“资源函数需要transit_gateway_attachment_id和transit_gateway_route_table_id
tg_rt = [
{
"name" = "A"
"tg_rt_id" = "tgw-rtb-aa"
},
{
"name" = "B"
"tg_rt_id" = "tgw-rtb-bb"
},
{
"name" = "C"
"tg_rt_id" = "tgw-rtb-cc"
},
{
"name" = "D"
"tg_rt_id" = "tgw-rtb-dd"
},
{
"name" = "E"
"tg_rt_id" = "tgw-rtb-ee"
},
{
"name" = "F"
"tg_rt_id" = "tgw-rtb-ff"
},
]
tga_vpn = [
{
"name" = "1"
"tga_id" = "tgw-attach-11"
},
{
"name" = "2"
"tga_id" = "tgw-attach-22"
},
{
"name" = "3"
"tga_id" = "tgw-attach-33"
},
{
"name" = "4"
"tga_id" = "tgw-attach-44"
},
{
"name" = "5"
"tga_id" = "tgw-attach-55"
},
{
"name" = "6"
"tga_id" = "tgw-attach-66"
},
{
"name" = "7"
"tga_id" = "tgw-attach-77"
},
{
"name" = "8"
"tga_id" = "tgw-attach-88"
},
] for tgw_rt in tgw_rts: # list of dicts with id and name
for tga_vpn in tga_vpns: # # list of dict with id and name
if tgw_rt.name == "PROD" and tga_vpn.name in [1, 2, 3, 4]:
rt_id = tgw_rt.id
vpn_attachment_id = tga_vpn.id
elif tgw_rt.name == "DEV" and tga_vpn.name in [5, 6, 7, 8]:
rt_id = tgw_rt.id
vpn_attachment_id = tga_vpn.id
elif tgw_rt.name == "STAGING" and tga_vpn.name in [9, 10, 11, 12]:
rt_id = tgw_rt.id
vpn_attachment_id = tga_vpn.idresource "aws_ec2_transit_gateway_route_table_association" "TGW-RT-VPN-ASSOCIATION" {
for_each = {
for tg_vpn_attach, tg_vpn_attach_details in local.above_map : tg_vpn_attach => tg_vpn_attach_details
}
transit_gateway_route_table_id = each.rt_id # for reference
transit_gateway_attachment_id = each.vpn_attachment_id # for reference
}同样,我已经部署了一个TGW,它有6个路由表/路由,有几个VPC和VPN附件类型,并希望根据上面的逻辑格式创建正确的关联/传播。
如果有任何问题和帮助,请告诉我。
谢谢!
发布于 2021-02-20 00:38:12
您的[9, 10, 11, 12]中没有tga_vpn,所以我将只关注prod和dev。
假设我正确地理解了您想要的结果,您应该能够构造您的数据结构,如下所示:
variable "tg_rt" {
default = [
{
"name" = "A"
"tg_rt_id" = "tgw-rtb-aa"
},
{
"name" = "B"
"tg_rt_id" = "tgw-rtb-bb"
},
{
"name" = "C"
"tg_rt_id" = "tgw-rtb-cc"
},
{
"name" = "D"
"tg_rt_id" = "tgw-rtb-dd"
},
{
"name" = "E"
"tg_rt_id" = "tgw-rtb-ee"
},
{
"name" = "F"
"tg_rt_id" = "tgw-rtb-ff"
},
]
}
variable "tga_vpn" {
default = [
{
"name" = "1"
"tga_id" = "tgw-attach-11"
},
{
"name" = "2"
"tga_id" = "tgw-attach-22"
},
{
"name" = "3"
"tga_id" = "tgw-attach-33"
},
{
"name" = "4"
"tga_id" = "tgw-attach-44"
},
{
"name" = "5"
"tga_id" = "tgw-attach-55"
},
{
"name" = "6"
"tga_id" = "tgw-attach-66"
},
{
"name" = "7"
"tga_id" = "tgw-attach-77"
},
{
"name" = "8"
"tga_id" = "tgw-attach-88"
},
]
}
locals {
prod = merge(flatten([ for idx1, tgw_rt in var.tg_rt:
{
for idx2, tga_vpn in var.tga_vpn:
"${tgw_rt.tg_rt_id}-${ tga_vpn.tga_id}" =>
{ rt_id = tgw_rt.tg_rt_id
vpn_attachment_id = tga_vpn.tga_id
} if contains(["1", "2", "3", "4"], tga_vpn.name)
}
])...)
dev = merge(flatten([ for idx1, tgw_rt in var.tg_rt:
{
for idx2, tga_vpn in var.tga_vpn:
"${tgw_rt.tg_rt_id}-${ tga_vpn.tga_id}" =>
{ rt_id = tgw_rt.tg_rt_id
vpn_attachment_id = tga_vpn.tga_id
} if contains(["5", "6", "7", "8"], tga_vpn.name)
}
])...)
prod_dev_map = {
prod = local.prod
dev = local.dev
}
}
output "prod" {
value = local.prod_dev_map
}这将导致prod_dev_map为:
{
"dev" = {
"tgw-rtb-aa-tgw-attach-55" = {
"rt_id" = "tgw-rtb-aa"
"vpn_attachment_id" = "tgw-attach-55"
}
"tgw-rtb-aa-tgw-attach-66" = {
"rt_id" = "tgw-rtb-aa"
"vpn_attachment_id" = "tgw-attach-66"
}
"tgw-rtb-aa-tgw-attach-77" = {
"rt_id" = "tgw-rtb-aa"
"vpn_attachment_id" = "tgw-attach-77"
}
"tgw-rtb-aa-tgw-attach-88" = {
"rt_id" = "tgw-rtb-aa"
"vpn_attachment_id" = "tgw-attach-88"
}
"tgw-rtb-bb-tgw-attach-55" = {
"rt_id" = "tgw-rtb-bb"
"vpn_attachment_id" = "tgw-attach-55"
}
"tgw-rtb-bb-tgw-attach-66" = {
"rt_id" = "tgw-rtb-bb"
"vpn_attachment_id" = "tgw-attach-66"
}
"tgw-rtb-bb-tgw-attach-77" = {
"rt_id" = "tgw-rtb-bb"
"vpn_attachment_id" = "tgw-attach-77"
}
"tgw-rtb-bb-tgw-attach-88" = {
"rt_id" = "tgw-rtb-bb"
"vpn_attachment_id" = "tgw-attach-88"
}
"tgw-rtb-cc-tgw-attach-55" = {
"rt_id" = "tgw-rtb-cc"
"vpn_attachment_id" = "tgw-attach-55"
}
"tgw-rtb-cc-tgw-attach-66" = {
"rt_id" = "tgw-rtb-cc"
"vpn_attachment_id" = "tgw-attach-66"
}
"tgw-rtb-cc-tgw-attach-77" = {
"rt_id" = "tgw-rtb-cc"
"vpn_attachment_id" = "tgw-attach-77"
}
"tgw-rtb-cc-tgw-attach-88" = {
"rt_id" = "tgw-rtb-cc"
"vpn_attachment_id" = "tgw-attach-88"
}
"tgw-rtb-dd-tgw-attach-55" = {
"rt_id" = "tgw-rtb-dd"
"vpn_attachment_id" = "tgw-attach-55"
}
"tgw-rtb-dd-tgw-attach-66" = {
"rt_id" = "tgw-rtb-dd"
"vpn_attachment_id" = "tgw-attach-66"
}
"tgw-rtb-dd-tgw-attach-77" = {
"rt_id" = "tgw-rtb-dd"
"vpn_attachment_id" = "tgw-attach-77"
}
"tgw-rtb-dd-tgw-attach-88" = {
"rt_id" = "tgw-rtb-dd"
"vpn_attachment_id" = "tgw-attach-88"
}
"tgw-rtb-ee-tgw-attach-55" = {
"rt_id" = "tgw-rtb-ee"
"vpn_attachment_id" = "tgw-attach-55"
}
"tgw-rtb-ee-tgw-attach-66" = {
"rt_id" = "tgw-rtb-ee"
"vpn_attachment_id" = "tgw-attach-66"
}
"tgw-rtb-ee-tgw-attach-77" = {
"rt_id" = "tgw-rtb-ee"
"vpn_attachment_id" = "tgw-attach-77"
}
"tgw-rtb-ee-tgw-attach-88" = {
"rt_id" = "tgw-rtb-ee"
"vpn_attachment_id" = "tgw-attach-88"
}
"tgw-rtb-ff-tgw-attach-55" = {
"rt_id" = "tgw-rtb-ff"
"vpn_attachment_id" = "tgw-attach-55"
}
"tgw-rtb-ff-tgw-attach-66" = {
"rt_id" = "tgw-rtb-ff"
"vpn_attachment_id" = "tgw-attach-66"
}
"tgw-rtb-ff-tgw-attach-77" = {
"rt_id" = "tgw-rtb-ff"
"vpn_attachment_id" = "tgw-attach-77"
}
"tgw-rtb-ff-tgw-attach-88" = {
"rt_id" = "tgw-rtb-ff"
"vpn_attachment_id" = "tgw-attach-88"
}
}
"prod" = {
"tgw-rtb-aa-tgw-attach-11" = {
"rt_id" = "tgw-rtb-aa"
"vpn_attachment_id" = "tgw-attach-11"
}
"tgw-rtb-aa-tgw-attach-22" = {
"rt_id" = "tgw-rtb-aa"
"vpn_attachment_id" = "tgw-attach-22"
}
"tgw-rtb-aa-tgw-attach-33" = {
"rt_id" = "tgw-rtb-aa"
"vpn_attachment_id" = "tgw-attach-33"
}
"tgw-rtb-aa-tgw-attach-44" = {
"rt_id" = "tgw-rtb-aa"
"vpn_attachment_id" = "tgw-attach-44"
}
"tgw-rtb-bb-tgw-attach-11" = {
"rt_id" = "tgw-rtb-bb"
"vpn_attachment_id" = "tgw-attach-11"
}
"tgw-rtb-bb-tgw-attach-22" = {
"rt_id" = "tgw-rtb-bb"
"vpn_attachment_id" = "tgw-attach-22"
}
"tgw-rtb-bb-tgw-attach-33" = {
"rt_id" = "tgw-rtb-bb"
"vpn_attachment_id" = "tgw-attach-33"
}
"tgw-rtb-bb-tgw-attach-44" = {
"rt_id" = "tgw-rtb-bb"
"vpn_attachment_id" = "tgw-attach-44"
}
"tgw-rtb-cc-tgw-attach-11" = {
"rt_id" = "tgw-rtb-cc"
"vpn_attachment_id" = "tgw-attach-11"
}
"tgw-rtb-cc-tgw-attach-22" = {
"rt_id" = "tgw-rtb-cc"
"vpn_attachment_id" = "tgw-attach-22"
}
"tgw-rtb-cc-tgw-attach-33" = {
"rt_id" = "tgw-rtb-cc"
"vpn_attachment_id" = "tgw-attach-33"
}
"tgw-rtb-cc-tgw-attach-44" = {
"rt_id" = "tgw-rtb-cc"
"vpn_attachment_id" = "tgw-attach-44"
}
"tgw-rtb-dd-tgw-attach-11" = {
"rt_id" = "tgw-rtb-dd"
"vpn_attachment_id" = "tgw-attach-11"
}
"tgw-rtb-dd-tgw-attach-22" = {
"rt_id" = "tgw-rtb-dd"
"vpn_attachment_id" = "tgw-attach-22"
}
"tgw-rtb-dd-tgw-attach-33" = {
"rt_id" = "tgw-rtb-dd"
"vpn_attachment_id" = "tgw-attach-33"
}
"tgw-rtb-dd-tgw-attach-44" = {
"rt_id" = "tgw-rtb-dd"
"vpn_attachment_id" = "tgw-attach-44"
}
"tgw-rtb-ee-tgw-attach-11" = {
"rt_id" = "tgw-rtb-ee"
"vpn_attachment_id" = "tgw-attach-11"
}
"tgw-rtb-ee-tgw-attach-22" = {
"rt_id" = "tgw-rtb-ee"
"vpn_attachment_id" = "tgw-attach-22"
}
"tgw-rtb-ee-tgw-attach-33" = {
"rt_id" = "tgw-rtb-ee"
"vpn_attachment_id" = "tgw-attach-33"
}
"tgw-rtb-ee-tgw-attach-44" = {
"rt_id" = "tgw-rtb-ee"
"vpn_attachment_id" = "tgw-attach-44"
}
"tgw-rtb-ff-tgw-attach-11" = {
"rt_id" = "tgw-rtb-ff"
"vpn_attachment_id" = "tgw-attach-11"
}
"tgw-rtb-ff-tgw-attach-22" = {
"rt_id" = "tgw-rtb-ff"
"vpn_attachment_id" = "tgw-attach-22"
}
"tgw-rtb-ff-tgw-attach-33" = {
"rt_id" = "tgw-rtb-ff"
"vpn_attachment_id" = "tgw-attach-33"
}
"tgw-rtb-ff-tgw-attach-44" = {
"rt_id" = "tgw-rtb-ff"
"vpn_attachment_id" = "tgw-attach-44"
}
}
}https://stackoverflow.com/questions/66282257
复制相似问题