Skip to content

Commit 2c2b640

Browse files
authored
Update deletion logic for VPC subnet, load balancer and PowerVS service instance (#1776)
1 parent ad34a74 commit 2c2b640

File tree

1 file changed

+35
-18
lines changed

1 file changed

+35
-18
lines changed

cloud/scope/powervs_cluster.go

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
"github.com/IBM/platform-services-go-sdk/resourcemanagerv2"
3737
"github.com/IBM/vpc-go-sdk/vpcv1"
3838

39+
kerrors "k8s.io/apimachinery/pkg/util/errors"
3940
"k8s.io/klog/v2"
4041
"k8s.io/utils/ptr"
4142

@@ -1835,6 +1836,8 @@ func (s *PowerVSClusterScope) GetServiceName(resourceType infrav1beta2.ResourceT
18351836

18361837
// DeleteLoadBalancer deletes loadBalancer.
18371838
func (s *PowerVSClusterScope) DeleteLoadBalancer() (bool, error) {
1839+
errs := []error{}
1840+
requeue := false
18381841
for _, lb := range s.IBMPowerVSCluster.Status.LoadBalancers {
18391842
if lb.ID == nil || lb.ControllerCreated == nil || !*lb.ControllerCreated {
18401843
continue
@@ -1847,9 +1850,10 @@ func (s *PowerVSClusterScope) DeleteLoadBalancer() (bool, error) {
18471850
if err != nil {
18481851
if strings.Contains(err.Error(), string(VPCLoadBalancerNotFound)) {
18491852
s.Info("VPC load balancer successfully deleted")
1850-
return false, nil
1853+
continue
18511854
}
1852-
return false, fmt.Errorf("error fetching the load balancer: %w", err)
1855+
errs = append(errs, fmt.Errorf("error fetching the load balancer: %w", err))
1856+
continue
18531857
}
18541858

18551859
if lb != nil && lb.ProvisioningStatus != nil && *lb.ProvisioningStatus == string(infrav1beta2.VPCLoadBalancerStateDeletePending) {
@@ -1860,16 +1864,21 @@ func (s *PowerVSClusterScope) DeleteLoadBalancer() (bool, error) {
18601864
if _, err = s.IBMVPCClient.DeleteLoadBalancer(&vpcv1.DeleteLoadBalancerOptions{
18611865
ID: lb.ID,
18621866
}); err != nil {
1863-
s.Error(err, "error deleting the load balancer")
1864-
return false, err
1867+
errs = append(errs, fmt.Errorf("error deleting the load balancer: %w", err))
1868+
continue
18651869
}
1866-
return true, nil
1870+
requeue = true
18671871
}
1868-
return false, nil
1872+
if len(errs) > 0 {
1873+
return false, kerrors.NewAggregate(errs)
1874+
}
1875+
return requeue, nil
18691876
}
18701877

18711878
// DeleteVPCSubnet deletes VPC subnet.
18721879
func (s *PowerVSClusterScope) DeleteVPCSubnet() (bool, error) {
1880+
errs := []error{}
1881+
requeue := false
18731882
for _, subnet := range s.IBMPowerVSCluster.Status.VPCSubnet {
18741883
if subnet.ID == nil || subnet.ControllerCreated == nil || !*subnet.ControllerCreated {
18751884
continue
@@ -1882,9 +1891,10 @@ func (s *PowerVSClusterScope) DeleteVPCSubnet() (bool, error) {
18821891
if err != nil {
18831892
if strings.Contains(err.Error(), string(VPCSubnetNotFound)) {
18841893
s.Info("VPC subnet successfully deleted")
1885-
return false, nil
1894+
continue
18861895
}
1887-
return false, fmt.Errorf("error fetching the subnet: %w", err)
1896+
errs = append(errs, fmt.Errorf("error fetching the subnet: %w", err))
1897+
continue
18881898
}
18891899

18901900
if net != nil && net.Status != nil && *net.Status == string(infrav1beta2.VPCSubnetStateDeleting) {
@@ -1894,11 +1904,15 @@ func (s *PowerVSClusterScope) DeleteVPCSubnet() (bool, error) {
18941904
if _, err = s.IBMVPCClient.DeleteSubnet(&vpcv1.DeleteSubnetOptions{
18951905
ID: net.ID,
18961906
}); err != nil {
1897-
return false, fmt.Errorf("error deleting VPC subnet: %w", err)
1907+
errs = append(errs, fmt.Errorf("error deleting VPC subnet: %w", err))
1908+
continue
18981909
}
1899-
return true, nil
1910+
requeue = true
19001911
}
1901-
return false, nil
1912+
if len(errs) > 0 {
1913+
return false, kerrors.NewAggregate(errs)
1914+
}
1915+
return requeue, nil
19021916
}
19031917

19041918
// DeleteVPC deletes VPC.
@@ -2051,14 +2065,17 @@ func (s *PowerVSClusterScope) DeleteServiceInstance() (bool, error) {
20512065
return false, nil
20522066
}
20532067

2054-
servers, err := s.IBMPowerVSClient.GetAllDHCPServers()
2055-
if err != nil {
2056-
return false, fmt.Errorf("error fetching networks in the PowerVS service instance: %w", err)
2057-
}
2068+
// If PowerVS service instance is in failed state, proceed with deletion instead of checking for existing network resources.
2069+
if serviceInstance != nil && *serviceInstance.State != string(infrav1beta2.ServiceInstanceStateFailed) {
2070+
servers, err := s.IBMPowerVSClient.GetAllDHCPServers()
2071+
if err != nil {
2072+
return false, fmt.Errorf("error fetching networks in the PowerVS service instance: %w", err)
2073+
}
20582074

2059-
if len(servers) > 0 {
2060-
s.Info("Wait for DHCP server to be deleted before deleting PowerVS service instance")
2061-
return true, nil
2075+
if len(servers) > 0 {
2076+
s.Info("Wait for DHCP server to be deleted before deleting PowerVS service instance")
2077+
return true, nil
2078+
}
20622079
}
20632080

20642081
if _, err = s.ResourceClient.DeleteResourceInstance(&resourcecontrollerv2.DeleteResourceInstanceOptions{

0 commit comments

Comments
 (0)