@@ -5,6 +5,9 @@ import isEmpty from 'lodash/isEmpty'
55import EC2 , {
66 DescribeTransitGatewayRouteTablesRequest ,
77 DescribeTransitGatewayRouteTablesResult ,
8+ SearchTransitGatewayRoutesRequest ,
9+ SearchTransitGatewayRoutesResult ,
10+ TransitGatewayRoute ,
811 TransitGatewayRouteTable ,
912} from 'aws-sdk/clients/ec2'
1013
@@ -83,13 +86,51 @@ const listTransitGatewayRouteTablesData = async ({
8386 listTransitGatewayRouteTables ( )
8487 } )
8588
89+ const searchTransitGatewayRoutes = async ( {
90+ ec2,
91+ transitGatewayRouteTableId,
92+ } : {
93+ ec2 : EC2
94+ transitGatewayRouteTableId : string
95+ } ) : Promise < TransitGatewayRoute [ ] > =>
96+ new Promise < TransitGatewayRoute [ ] > ( resolve => {
97+ const args : SearchTransitGatewayRoutesRequest = {
98+ TransitGatewayRouteTableId : transitGatewayRouteTableId ,
99+ Filters : [
100+ {
101+ Name : 'type' ,
102+ Values : [ 'propagated' , 'static' ] ,
103+ } ,
104+ ] ,
105+ }
106+ ec2 . searchTransitGatewayRoutes (
107+ args ,
108+ ( err : AWSError , data : SearchTransitGatewayRoutesResult ) => {
109+ if ( err ) {
110+ errorLog . generateAwsErrorLog ( {
111+ functionName : 'ec2:searchTransitGatewayRoutes' ,
112+ err,
113+ } )
114+ }
115+
116+ if ( ! isEmpty ( data ) ) {
117+ const { Routes : routes = [ ] } = data
118+ resolve ( routes )
119+ }
120+
121+ resolve ( [ ] )
122+ }
123+ )
124+ } )
125+
86126/**
87127 * Transit Gateway Route Table
88128 */
89129export interface RawAwsTransitGatewayRouteTable
90130 extends Omit < TransitGatewayRouteTable , 'Tags' > {
91131 region : string
92132 Tags ?: TagMap
133+ Routes ?: TransitGatewayRoute [ ]
93134}
94135
95136export default async ( {
@@ -103,6 +144,7 @@ export default async ({
103144} > =>
104145 new Promise ( async resolve => {
105146 const transitGatewayRouteTableResult : RawAwsTransitGatewayRouteTable [ ] = [ ]
147+ const routesPromises = [ ]
106148
107149 const regionPromises = regions . split ( ',' ) . map ( region => {
108150 const ec2 = new EC2 ( { ...config , region, endpoint } )
@@ -130,7 +172,30 @@ export default async ({
130172 } )
131173
132174 await Promise . all ( regionPromises )
133- errorLog . reset ( )
134175
176+ transitGatewayRouteTableResult . map (
177+ (
178+ { TransitGatewayRouteTableId : transitGatewayRouteTableId , region } ,
179+ idx
180+ ) => {
181+ const ec2 = new EC2 ( { ...config , region, endpoint } )
182+ const routePromise = new Promise < void > ( async resolveRoute => {
183+ const routes : TransitGatewayRoute [ ] =
184+ await searchTransitGatewayRoutes ( {
185+ ec2,
186+ transitGatewayRouteTableId,
187+ } )
188+ transitGatewayRouteTableResult [ idx ] = {
189+ ...transitGatewayRouteTableResult [ idx ] ,
190+ Routes : routes || [ ] ,
191+ }
192+ resolveRoute ( )
193+ } )
194+ routesPromises . push ( routePromise )
195+ }
196+ )
197+ await Promise . all ( routesPromises )
198+
199+ errorLog . reset ( )
135200 resolve ( groupBy ( transitGatewayRouteTableResult , 'region' ) )
136201 } )
0 commit comments