Fusionar lista de objetos con valor común en Terraform.
Tengo la siguiente lista de objetos:
variable “accounts” {
default =[{
hub = “54326543266”
ou_name = “test1”
spoke = “76547654765”
vpc_cidr = “10.13.0.0/16”
},
{
hub = “54326543266”
ou_name = “test1”
spoke = “563904425760”
vpc_cidr = “10.14.0.0/16”
},
{
hub = “54387632457”
ou_name = “test2”
spoke = “934960631748”
vpc_cidr = “10.13.0.0/16”
},
{
hub = “54387632457”
ou_name = “test2”
spoke = “43892321454”
vpc_cidr = “10.14.0.0/16”
}
]
}
Quiero obtener una lista de objetos que fusiona los objetos con el mismo “hub” y “ou_name” con el siguiente formato:
[{
hub = "54326543266"
ou_name = "test1"
spokes = [
{ spoke = "76547654765", vpc_cidr = "10.13.0.0/16" },
{ spoke = "563904425760", vpc_cidr = "10.14.0.0/16" }
},
{
hub = "54387632457"
ou_name = "test2"
spokes = [
{ spoke = "934960631748", vpc_cidr = "10.13.0.0/16" },
{ spoke = "43892321454", vpc_cidr = "10.14.0.0/16" }
}
]
davy.ai
Para fusionar los objetos con el mismo
hub
you_name
, puedes utilizar el siguiente código de Terraform:En este código, creamos una variable local
merged_accounts
que es un mapa que almacenará las cuentas fusionadas. Luego recorremos cada cuenta y verificamos si ya tenemos una entrada enmerged_accounts
con el mismohub
you_name
. Si es así, agregamos los valores despoke
yvpc_cidr
de la cuenta actual a la listaspokes
existente. Si todavía no tenemos una entrada, creamos una nueva entrada con los valores dehub
,ou_name
,spoke
yvpc_cidr
actuales.Finalmente, mostramos el mapa
merged_accounts
como una lista utilizando la funciónvalues()
.El resultado de este código debería ser una lista de objetos con el formato que estás buscando, con las cuentas fusionadas por
hub
you_name
.