Skip to content

Commit ac6c4fd

Browse files
authored
Merge pull request #1260 from ruifaling/main
🐛 delete port left over by err openstackmachine
2 parents af2586e + 356469b commit ac6c4fd

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

controllers/openstackcluster_controller.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,11 @@ func reconcileDelete(ctx context.Context, scope *scope.Scope, patchHelper *patch
142142

143143
clusterName := fmt.Sprintf("%s-%s", cluster.Namespace, cluster.Name)
144144

145+
if err = networkingService.DeletePorts(openStackCluster); err != nil {
146+
handleUpdateOSCError(openStackCluster, errors.Errorf("failed to delete ports: %v", err))
147+
return reconcile.Result{}, errors.Wrap(err, "failed to delete ports")
148+
}
149+
145150
if openStackCluster.Spec.APIServerLoadBalancer.Enabled {
146151
loadBalancerService, err := loadbalancer.NewService(scope)
147152
if err != nil {

pkg/cloud/services/networking/port.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package networking
1818

1919
import (
2020
"fmt"
21+
"strings"
2122
"time"
2223

2324
"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/portsbinding"
@@ -243,6 +244,32 @@ func (s *Service) DeletePort(eventObject runtime.Object, portID string) error {
243244
return nil
244245
}
245246

247+
func (s *Service) DeletePorts(openStackCluster *infrav1.OpenStackCluster) error {
248+
networkID := openStackCluster.Spec.Network.ID
249+
portList, err := s.client.ListPort(ports.ListOpts{
250+
NetworkID: networkID,
251+
DeviceOwner: "",
252+
})
253+
if err != nil {
254+
if capoerrors.IsNotFound(err) {
255+
return nil
256+
}
257+
return fmt.Errorf("list ports of network %q: %v", networkID, err)
258+
}
259+
260+
for _, port := range portList {
261+
if strings.HasPrefix(port.Name, openStackCluster.Name) {
262+
err := s.DeletePort(openStackCluster, port.ID)
263+
if capoerrors.IsNotFound(err) {
264+
continue
265+
}
266+
return fmt.Errorf("delete port %s of network %q failed : %v", port.ID, networkID, err)
267+
}
268+
}
269+
270+
return nil
271+
}
272+
246273
func (s *Service) GarbageCollectErrorInstancesPort(eventObject runtime.Object, instanceName string) error {
247274
portList, err := s.client.ListPort(ports.ListOpts{
248275
Name: instanceName,

0 commit comments

Comments
 (0)