@@ -36,6 +36,7 @@ import (
36
36
"github.com/IBM/platform-services-go-sdk/resourcemanagerv2"
37
37
"github.com/IBM/vpc-go-sdk/vpcv1"
38
38
39
+ kerrors "k8s.io/apimachinery/pkg/util/errors"
39
40
"k8s.io/klog/v2"
40
41
"k8s.io/utils/ptr"
41
42
@@ -1835,6 +1836,8 @@ func (s *PowerVSClusterScope) GetServiceName(resourceType infrav1beta2.ResourceT
1835
1836
1836
1837
// DeleteLoadBalancer deletes loadBalancer.
1837
1838
func (s * PowerVSClusterScope ) DeleteLoadBalancer () (bool , error ) {
1839
+ errs := []error {}
1840
+ requeue := false
1838
1841
for _ , lb := range s .IBMPowerVSCluster .Status .LoadBalancers {
1839
1842
if lb .ID == nil || lb .ControllerCreated == nil || ! * lb .ControllerCreated {
1840
1843
continue
@@ -1847,9 +1850,10 @@ func (s *PowerVSClusterScope) DeleteLoadBalancer() (bool, error) {
1847
1850
if err != nil {
1848
1851
if strings .Contains (err .Error (), string (VPCLoadBalancerNotFound )) {
1849
1852
s .Info ("VPC load balancer successfully deleted" )
1850
- return false , nil
1853
+ continue
1851
1854
}
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
1853
1857
}
1854
1858
1855
1859
if lb != nil && lb .ProvisioningStatus != nil && * lb .ProvisioningStatus == string (infrav1beta2 .VPCLoadBalancerStateDeletePending ) {
@@ -1860,16 +1864,21 @@ func (s *PowerVSClusterScope) DeleteLoadBalancer() (bool, error) {
1860
1864
if _ , err = s .IBMVPCClient .DeleteLoadBalancer (& vpcv1.DeleteLoadBalancerOptions {
1861
1865
ID : lb .ID ,
1862
1866
}); 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
1865
1869
}
1866
- return true , nil
1870
+ requeue = true
1867
1871
}
1868
- return false , nil
1872
+ if len (errs ) > 0 {
1873
+ return false , kerrors .NewAggregate (errs )
1874
+ }
1875
+ return requeue , nil
1869
1876
}
1870
1877
1871
1878
// DeleteVPCSubnet deletes VPC subnet.
1872
1879
func (s * PowerVSClusterScope ) DeleteVPCSubnet () (bool , error ) {
1880
+ errs := []error {}
1881
+ requeue := false
1873
1882
for _ , subnet := range s .IBMPowerVSCluster .Status .VPCSubnet {
1874
1883
if subnet .ID == nil || subnet .ControllerCreated == nil || ! * subnet .ControllerCreated {
1875
1884
continue
@@ -1882,9 +1891,10 @@ func (s *PowerVSClusterScope) DeleteVPCSubnet() (bool, error) {
1882
1891
if err != nil {
1883
1892
if strings .Contains (err .Error (), string (VPCSubnetNotFound )) {
1884
1893
s .Info ("VPC subnet successfully deleted" )
1885
- return false , nil
1894
+ continue
1886
1895
}
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
1888
1898
}
1889
1899
1890
1900
if net != nil && net .Status != nil && * net .Status == string (infrav1beta2 .VPCSubnetStateDeleting ) {
@@ -1894,11 +1904,15 @@ func (s *PowerVSClusterScope) DeleteVPCSubnet() (bool, error) {
1894
1904
if _ , err = s .IBMVPCClient .DeleteSubnet (& vpcv1.DeleteSubnetOptions {
1895
1905
ID : net .ID ,
1896
1906
}); 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
1898
1909
}
1899
- return true , nil
1910
+ requeue = true
1900
1911
}
1901
- return false , nil
1912
+ if len (errs ) > 0 {
1913
+ return false , kerrors .NewAggregate (errs )
1914
+ }
1915
+ return requeue , nil
1902
1916
}
1903
1917
1904
1918
// DeleteVPC deletes VPC.
@@ -2051,14 +2065,17 @@ func (s *PowerVSClusterScope) DeleteServiceInstance() (bool, error) {
2051
2065
return false , nil
2052
2066
}
2053
2067
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
+ }
2058
2074
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
+ }
2062
2079
}
2063
2080
2064
2081
if _ , err = s .ResourceClient .DeleteResourceInstance (& resourcecontrollerv2.DeleteResourceInstanceOptions {
0 commit comments