@@ -214,6 +214,32 @@ func (s *Service) describeVpcRouteTablesBySubnet() (map[string]*ec2.RouteTable,
214
214
return res , nil
215
215
}
216
216
217
+ func (s * Service ) deleteRouteTable (rt * ec2.RouteTable ) error {
218
+ for _ , as := range rt .Associations {
219
+ if as .SubnetId == nil {
220
+ continue
221
+ }
222
+
223
+ if _ , err := s .EC2Client .DisassociateRouteTableWithContext (context .TODO (), & ec2.DisassociateRouteTableInput {AssociationId : as .RouteTableAssociationId }); err != nil {
224
+ record .Warnf (s .scope .InfraCluster (), "FailedDisassociateRouteTable" , "Failed to disassociate managed RouteTable %q from Subnet %q: %v" , * rt .RouteTableId , * as .SubnetId , err )
225
+ return errors .Wrapf (err , "failed to disassociate route table %q from subnet %q" , * rt .RouteTableId , * as .SubnetId )
226
+ }
227
+
228
+ record .Eventf (s .scope .InfraCluster (), "SuccessfulDisassociateRouteTable" , "Disassociated managed RouteTable %q from subnet %q" , * rt .RouteTableId , * as .SubnetId )
229
+ s .scope .Debug ("Deleted association between route table and subnet" , "route-table-id" , * rt .RouteTableId , "subnet-id" , * as .SubnetId )
230
+ }
231
+
232
+ if _ , err := s .EC2Client .DeleteRouteTableWithContext (context .TODO (), & ec2.DeleteRouteTableInput {RouteTableId : rt .RouteTableId }); err != nil {
233
+ record .Warnf (s .scope .InfraCluster (), "FailedDeleteRouteTable" , "Failed to delete managed RouteTable %q: %v" , * rt .RouteTableId , err )
234
+ return errors .Wrapf (err , "failed to delete route table %q" , * rt .RouteTableId )
235
+ }
236
+
237
+ record .Eventf (s .scope .InfraCluster (), "SuccessfulDeleteRouteTable" , "Deleted managed RouteTable %q" , * rt .RouteTableId )
238
+ s .scope .Info ("Deleted route table" , "route-table-id" , * rt .RouteTableId )
239
+
240
+ return nil
241
+ }
242
+
217
243
func (s * Service ) deleteRouteTables () error {
218
244
if s .scope .VPC ().IsUnmanaged (s .scope .Name ()) {
219
245
s .scope .Trace ("Skipping routing tables deletion in unmanaged mode" )
@@ -226,27 +252,10 @@ func (s *Service) deleteRouteTables() error {
226
252
}
227
253
228
254
for _ , rt := range rts {
229
- for _ , as := range rt .Associations {
230
- if as .SubnetId == nil {
231
- continue
232
- }
233
-
234
- if _ , err := s .EC2Client .DisassociateRouteTableWithContext (context .TODO (), & ec2.DisassociateRouteTableInput {AssociationId : as .RouteTableAssociationId }); err != nil {
235
- record .Warnf (s .scope .InfraCluster (), "FailedDisassociateRouteTable" , "Failed to disassociate managed RouteTable %q from Subnet %q: %v" , * rt .RouteTableId , * as .SubnetId , err )
236
- return errors .Wrapf (err , "failed to disassociate route table %q from subnet %q" , * rt .RouteTableId , * as .SubnetId )
237
- }
238
-
239
- record .Eventf (s .scope .InfraCluster (), "SuccessfulDisassociateRouteTable" , "Disassociated managed RouteTable %q from subnet %q" , * rt .RouteTableId , * as .SubnetId )
240
- s .scope .Debug ("Deleted association between route table and subnet" , "route-table-id" , * rt .RouteTableId , "subnet-id" , * as .SubnetId )
241
- }
242
-
243
- if _ , err := s .EC2Client .DeleteRouteTableWithContext (context .TODO (), & ec2.DeleteRouteTableInput {RouteTableId : rt .RouteTableId }); err != nil {
244
- record .Warnf (s .scope .InfraCluster (), "FailedDeleteRouteTable" , "Failed to delete managed RouteTable %q: %v" , * rt .RouteTableId , err )
245
- return errors .Wrapf (err , "failed to delete route table %q" , * rt .RouteTableId )
255
+ err := s .deleteRouteTable (rt )
256
+ if err != nil {
257
+ return err
246
258
}
247
-
248
- record .Eventf (s .scope .InfraCluster (), "SuccessfulDeleteRouteTable" , "Deleted managed RouteTable %q" , * rt .RouteTableId )
249
- s .scope .Info ("Deleted route table" , "route-table-id" , * rt .RouteTableId )
250
259
}
251
260
return nil
252
261
}
@@ -302,8 +311,11 @@ func (s *Service) createRouteTableWithRoutes(routes []*ec2.Route, isPublic bool,
302
311
}
303
312
return true , nil
304
313
}, awserrors .RouteTableNotFound , awserrors .NATGatewayNotFound , awserrors .GatewayNotFound ); err != nil {
305
- // TODO(vincepri): cleanup the route table if this fails.
306
314
record .Warnf (s .scope .InfraCluster (), "FailedCreateRoute" , "Failed to create route %s for RouteTable %q: %v" , route .GoString (), * out .RouteTable .RouteTableId , err )
315
+ errDel := s .deleteRouteTable (out .RouteTable )
316
+ if errDel != nil {
317
+ record .Warnf (s .scope .InfraCluster (), "FailedDeleteRouteTable" , "Failed to delete managed RouteTable %q: %v" , * out .RouteTable .RouteTableId , errDel )
318
+ }
307
319
return nil , errors .Wrapf (err , "failed to create route in route table %q: %s" , * out .RouteTable .RouteTableId , route .GoString ())
308
320
}
309
321
record .Eventf (s .scope .InfraCluster (), "SuccessfulCreateRoute" , "Created route %s for RouteTable %q" , route .GoString (), * out .RouteTable .RouteTableId )
0 commit comments