Skip to content

Commit 62b57e3

Browse files
committed
Delete router/network/subnet
1 parent a0cf06a commit 62b57e3

File tree

3 files changed

+49
-1
lines changed

3 files changed

+49
-1
lines changed

controllers/openstackcluster_controller.go

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,24 @@ func (r *OpenStackClusterReconciler) reconcileDelete(ctx context.Context, log lo
150150
}
151151
}
152152

153-
// TODO(sbueringer) Delete network/subnet/router/... if created by CAPO
153+
if openStackCluster.Status.Network.Router != nil {
154+
log.Info("Deleting router", "name", openStackCluster.Status.Network.Router.Name)
155+
err := networkingService.DeleteRouter(openStackCluster.Status.Network)
156+
if err != nil {
157+
return ctrl.Result{}, errors.Errorf("failed to delete router: %v", err)
158+
}
159+
log.Info("OpenStack router deleted successfully")
160+
}
161+
162+
if openStackCluster.Status.Network != nil {
163+
log.Info("Deleting network", "name", openStackCluster.Status.Network.Name)
164+
err := networkingService.DeleteNetwork(openStackCluster.Status.Network)
165+
if err != nil {
166+
return ctrl.Result{}, errors.Errorf("failed to delete network: %v", err)
167+
}
168+
log.Info("OpenStack network deleted successfully")
169+
}
170+
log.Info("OpenStack cluster deleted successfully")
154171

155172
// Cluster is deleted so remove the finalizer.
156173
controllerutil.RemoveFinalizer(openStackCluster, infrav1.ClusterFinalizer)
@@ -297,6 +314,7 @@ func (r *OpenStackClusterReconciler) reconcileNormal(ctx context.Context, log lo
297314
}
298315

299316
openStackCluster.Status.Ready = true
317+
log.Info("Reconciled Cluster create successfully")
300318
return ctrl.Result{}, nil
301319
}
302320

pkg/cloud/services/networking/network.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,15 @@ func (s *Service) ReconcileNetwork(clusterName string, openStackCluster *infrav1
9191
return nil
9292
}
9393

94+
func (s *Service) DeleteNetwork(network *infrav1.Network) error {
95+
96+
if network == nil || network.ID == "" {
97+
s.logger.V(4).Info("No need to delete network since no network exists.")
98+
return nil
99+
}
100+
return networks.Delete(s.client, network.ID).ExtractErr()
101+
}
102+
94103
func (s *Service) ReconcileSubnet(clusterName string, openStackCluster *infrav1.OpenStackCluster) error {
95104

96105
if openStackCluster.Status.Network == nil || openStackCluster.Status.Network.ID == "" {

pkg/cloud/services/networking/router.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,27 @@ INTERFACE_LOOP:
165165
return nil
166166
}
167167

168+
func (s *Service) DeleteRouter(network *infrav1.Network) error {
169+
170+
if network.Router == nil || network.Router.ID == "" {
171+
s.logger.V(4).Info("No need to delete router since no router exists.")
172+
return nil
173+
}
174+
175+
if network.Subnet == nil || network.Subnet.ID == "" {
176+
s.logger.V(4).Info("No need to remove router interface since no subnet exists.")
177+
} else {
178+
_, err := routers.RemoveInterface(s.client, network.Router.ID, routers.RemoveInterfaceOpts{
179+
SubnetID: network.Subnet.ID,
180+
}).Extract()
181+
if err != nil {
182+
return fmt.Errorf("unable to remove router interface: %v", err)
183+
}
184+
s.logger.V(4).Info("Removed RouterInterface of Router", "id", network.Router.ID)
185+
}
186+
return routers.Delete(s.client, network.Router.ID).ExtractErr()
187+
}
188+
168189
func (s *Service) getRouterInterfaces(routerID string) ([]ports.Port, error) {
169190
allPages, err := ports.List(s.client, ports.ListOpts{
170191
DeviceID: routerID,

0 commit comments

Comments
 (0)