@@ -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.
18371838func (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.
18721879func (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