@@ -175,31 +175,31 @@ func (r *OpenStackClusterReconciler) reconcileDelete(ctx context.Context, scope
175
175
}
176
176
177
177
if err = loadBalancerService .DeleteLoadBalancer (openStackCluster , clusterResourceName ); err != nil {
178
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to delete load balancer: %w" , err ))
178
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to delete load balancer: %w" , err ), false )
179
179
return reconcile.Result {}, fmt .Errorf ("failed to delete load balancer: %w" , err )
180
180
}
181
181
}
182
182
183
183
// if ManagedSubnets was not set, no network was created.
184
184
if len (openStackCluster .Spec .ManagedSubnets ) > 0 {
185
185
if err = networkingService .DeleteRouter (openStackCluster , clusterResourceName ); err != nil {
186
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to delete router: %w" , err ))
186
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to delete router: %w" , err ), false )
187
187
return ctrl.Result {}, fmt .Errorf ("failed to delete router: %w" , err )
188
188
}
189
189
190
190
if err = networkingService .DeleteClusterPorts (openStackCluster ); err != nil {
191
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to delete ports: %w" , err ))
191
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to delete ports: %w" , err ), false )
192
192
return reconcile.Result {}, fmt .Errorf ("failed to delete ports: %w" , err )
193
193
}
194
194
195
195
if err = networkingService .DeleteNetwork (openStackCluster , clusterResourceName ); err != nil {
196
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to delete network: %w" , err ))
196
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to delete network: %w" , err ), false )
197
197
return ctrl.Result {}, fmt .Errorf ("failed to delete network: %w" , err )
198
198
}
199
199
}
200
200
201
201
if err = networkingService .DeleteSecurityGroups (openStackCluster , clusterResourceName ); err != nil {
202
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to delete security groups: %w" , err ))
202
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to delete security groups: %w" , err ), false )
203
203
return reconcile.Result {}, fmt .Errorf ("failed to delete security groups: %w" , err )
204
204
}
205
205
@@ -271,7 +271,7 @@ func deleteBastion(scope *scope.WithLogger, cluster *clusterv1.Cluster, openStac
271
271
272
272
if openStackCluster .Status .Bastion != nil && openStackCluster .Status .Bastion .FloatingIP != "" {
273
273
if err = networkingService .DeleteFloatingIP (openStackCluster , openStackCluster .Status .Bastion .FloatingIP ); err != nil {
274
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to delete floating IP: %w" , err ))
274
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to delete floating IP: %w" , err ), false )
275
275
return fmt .Errorf ("failed to delete floating IP: %w" , err )
276
276
}
277
277
}
@@ -311,14 +311,14 @@ func deleteBastion(scope *scope.WithLogger, cluster *clusterv1.Cluster, openStac
311
311
if address .Type == corev1 .NodeExternalIP {
312
312
// Floating IP may not have properly saved in bastion status (thus not deleted above), delete any remaining floating IP
313
313
if err = networkingService .DeleteFloatingIP (openStackCluster , address .Address ); err != nil {
314
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to delete floating IP: %w" , err ))
314
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to delete floating IP: %w" , err ), false )
315
315
return fmt .Errorf ("failed to delete floating IP: %w" , err )
316
316
}
317
317
}
318
318
}
319
319
320
320
if err = computeService .DeleteInstance (openStackCluster , instanceStatus ); err != nil {
321
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to delete bastion: %w" , err ))
321
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to delete bastion: %w" , err ), false )
322
322
return fmt .Errorf ("failed to delete bastion: %w" , err )
323
323
}
324
324
}
@@ -330,7 +330,7 @@ func deleteBastion(scope *scope.WithLogger, cluster *clusterv1.Cluster, openStac
330
330
}
331
331
for _ , port := range bastionStatus .Resources .Ports {
332
332
if err := networkingService .DeleteInstanceTrunkAndPort (openStackCluster , port , trunkSupported ); err != nil {
333
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to delete port: %w" , err ))
333
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to delete port: %w" , err ), false )
334
334
return fmt .Errorf ("failed to delete port: %w" , err )
335
335
}
336
336
}
@@ -459,7 +459,7 @@ func reconcileBastion(scope *scope.WithLogger, cluster *clusterv1.Cluster, openS
459
459
460
460
err = getOrCreateBastionPorts (openStackCluster , networkingService )
461
461
if err != nil {
462
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to get or create ports for bastion: %w" , err ))
462
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to get or create ports for bastion: %w" , err ), false )
463
463
return nil , fmt .Errorf ("failed to get or create ports for bastion: %w" , err )
464
464
}
465
465
bastionPortIDs := GetPortIDs (openStackCluster .Status .Bastion .Resources .Ports )
@@ -504,7 +504,7 @@ func reconcileBastion(scope *scope.WithLogger, cluster *clusterv1.Cluster, openS
504
504
port , err := computeService .GetManagementPort (openStackCluster , instanceStatus )
505
505
if err != nil {
506
506
err = fmt .Errorf ("getting management port for bastion: %w" , err )
507
- handleUpdateOSCError (openStackCluster , err )
507
+ handleUpdateOSCError (openStackCluster , err , false )
508
508
return nil , err
509
509
}
510
510
@@ -514,7 +514,7 @@ func reconcileBastion(scope *scope.WithLogger, cluster *clusterv1.Cluster, openS
514
514
func bastionAddFloatingIP (openStackCluster * infrav1.OpenStackCluster , clusterResourceName string , port * ports.Port , networkingService * networking.Service ) (* reconcile.Result , error ) {
515
515
fp , err := networkingService .GetFloatingIPByPortID (port .ID )
516
516
if err != nil {
517
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to get or create floating IP for bastion: %w" , err ))
517
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to get or create floating IP for bastion: %w" , err ), false )
518
518
return nil , fmt .Errorf ("failed to get floating IP for bastion port: %w" , err )
519
519
}
520
520
if fp != nil {
@@ -535,14 +535,14 @@ func bastionAddFloatingIP(openStackCluster *infrav1.OpenStackCluster, clusterRes
535
535
// Check if there is an existing floating IP attached to bastion, in case where FloatingIP would not yet have been stored in cluster status
536
536
fp , err = networkingService .GetOrCreateFloatingIP (openStackCluster , openStackCluster , clusterResourceName , floatingIP )
537
537
if err != nil {
538
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to get or create floating IP for bastion: %w" , err ))
538
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to get or create floating IP for bastion: %w" , err ), false )
539
539
return nil , fmt .Errorf ("failed to get or create floating IP for bastion: %w" , err )
540
540
}
541
541
openStackCluster .Status .Bastion .FloatingIP = fp .FloatingIP
542
542
543
543
err = networkingService .AssociateFloatingIP (openStackCluster , fp , port .ID )
544
544
if err != nil {
545
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to associate floating IP with bastion: %w" , err ))
545
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to associate floating IP with bastion: %w" , err ), false )
546
546
return nil , fmt .Errorf ("failed to associate floating IP with bastion: %w" , err )
547
547
}
548
548
@@ -644,7 +644,9 @@ func resolveLoadBalancerNetwork(openStackCluster *infrav1.OpenStackCluster, netw
644
644
if lbSpec .Network != nil {
645
645
lbNet , err := networkingService .GetNetworkByParam (lbSpec .Network )
646
646
if err != nil {
647
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to find loadbalancer network: %w" , err ))
647
+ if errors .Is (err , capoerrors .ErrFilterMatch ) {
648
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to find loadbalancer network: %w" , err ), true )
649
+ }
648
650
return fmt .Errorf ("failed to find network: %w" , err )
649
651
}
650
652
@@ -666,7 +668,7 @@ func resolveLoadBalancerNetwork(openStackCluster *infrav1.OpenStackCluster, netw
666
668
}
667
669
}
668
670
if ! matchFound {
669
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("no subnet match was found in the specified network (specified subnet: %v, available subnets: %v)" , s , lbNet .Subnets ))
671
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("no subnet match was found in the specified network (specified subnet: %v, available subnets: %v)" , s , lbNet .Subnets ), false )
670
672
return fmt .Errorf ("no subnet match was found in the specified network (specified subnet: %v, available subnets: %v)" , s , lbNet .Subnets )
671
673
}
672
674
}
@@ -688,7 +690,7 @@ func reconcileNetworkComponents(scope *scope.WithLogger, cluster *clusterv1.Clus
688
690
689
691
err = networkingService .ReconcileExternalNetwork (openStackCluster )
690
692
if err != nil {
691
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to reconcile external network: %w" , err ))
693
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to reconcile external network: %w" , err ), false )
692
694
return fmt .Errorf ("failed to reconcile external network: %w" , err )
693
695
}
694
696
@@ -706,13 +708,13 @@ func reconcileNetworkComponents(scope *scope.WithLogger, cluster *clusterv1.Clus
706
708
707
709
err = resolveLoadBalancerNetwork (openStackCluster , networkingService )
708
710
if err != nil {
709
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to reconcile loadbalancer network: %w" , err ))
711
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to reconcile loadbalancer network: %w" , err ), false )
710
712
return fmt .Errorf ("failed to reconcile loadbalancer network: %w" , err )
711
713
}
712
714
713
715
err = networkingService .ReconcileSecurityGroups (openStackCluster , clusterResourceName )
714
716
if err != nil {
715
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to reconcile security groups: %w" , err ))
717
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to reconcile security groups: %w" , err ), false )
716
718
return fmt .Errorf ("failed to reconcile security groups: %w" , err )
717
719
}
718
720
@@ -732,7 +734,7 @@ func reconcilePreExistingNetworkComponents(scope *scope.WithLogger, networkingSe
732
734
if openStackCluster .Spec .Network != nil {
733
735
network , err := networkingService .GetNetworkByParam (openStackCluster .Spec .Network )
734
736
if err != nil {
735
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to find network: %w" , err ))
737
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to find network: %w" , err ), false )
736
738
return fmt .Errorf ("error fetching cluster network: %w" , err )
737
739
}
738
740
setClusterNetwork (openStackCluster , network )
@@ -776,17 +778,17 @@ func reconcilePreExistingNetworkComponents(scope *scope.WithLogger, networkingSe
776
778
func reconcileProvisionedNetworkComponents (networkingService * networking.Service , openStackCluster * infrav1.OpenStackCluster , clusterResourceName string ) error {
777
779
err := networkingService .ReconcileNetwork (openStackCluster , clusterResourceName )
778
780
if err != nil {
779
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to reconcile network: %w" , err ))
781
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to reconcile network: %w" , err ), false )
780
782
return fmt .Errorf ("failed to reconcile network: %w" , err )
781
783
}
782
784
err = networkingService .ReconcileSubnet (openStackCluster , clusterResourceName )
783
785
if err != nil {
784
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to reconcile subnets: %w" , err ))
786
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to reconcile subnets: %w" , err ), false )
785
787
return fmt .Errorf ("failed to reconcile subnets: %w" , err )
786
788
}
787
789
err = networkingService .ReconcileRouter (openStackCluster , clusterResourceName )
788
790
if err != nil {
789
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to reconcile router: %w" , err ))
791
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to reconcile router: %w" , err ), false )
790
792
return fmt .Errorf ("failed to reconcile router: %w" , err )
791
793
}
792
794
@@ -815,10 +817,7 @@ func reconcileControlPlaneEndpoint(scope *scope.WithLogger, networkingService *n
815
817
816
818
terminalFailure , err := loadBalancerService .ReconcileLoadBalancer (openStackCluster , clusterResourceName , apiServerPort )
817
819
if err != nil {
818
- // if it's terminalFailure (not Transient), set the Failure reason and message
819
- if terminalFailure {
820
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to reconcile load balancer: %w" , err ))
821
- }
820
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("failed to reconcile load balancer: %w" , err ), terminalFailure )
822
821
return fmt .Errorf ("failed to reconcile load balancer: %w" , err )
823
822
}
824
823
@@ -840,7 +839,7 @@ func reconcileControlPlaneEndpoint(scope *scope.WithLogger, networkingService *n
840
839
case ! ptr .Deref (openStackCluster .Spec .DisableAPIServerFloatingIP , false ):
841
840
fp , err := networkingService .GetOrCreateFloatingIP (openStackCluster , openStackCluster , clusterResourceName , openStackCluster .Spec .APIServerFloatingIP )
842
841
if err != nil {
843
- handleUpdateOSCError (openStackCluster , fmt .Errorf ("floating IP cannot be got or created: %w" , err ))
842
+ handleUpdateOSCError (openStackCluster , fmt .Errorf ("floating IP cannot be got or created: %w" , err ), false )
844
843
return fmt .Errorf ("floating IP cannot be got or created: %w" , err )
845
844
}
846
845
host = fp .FloatingIP
@@ -855,7 +854,7 @@ func reconcileControlPlaneEndpoint(scope *scope.WithLogger, networkingService *n
855
854
// Control plane endpoint is not set, and none can be created
856
855
default :
857
856
err := fmt .Errorf ("unable to determine control plane endpoint" )
858
- handleUpdateOSCError (openStackCluster , err )
857
+ handleUpdateOSCError (openStackCluster , err , false )
859
858
return err
860
859
}
861
860
@@ -912,10 +911,12 @@ func (r *OpenStackClusterReconciler) SetupWithManager(ctx context.Context, mgr c
912
911
Complete (r )
913
912
}
914
913
915
- func handleUpdateOSCError (openstackCluster * infrav1.OpenStackCluster , message error ) {
916
- err := capierrors .UpdateClusterError
917
- openstackCluster .Status .FailureReason = & err
918
- openstackCluster .Status .FailureMessage = ptr .To (message .Error ())
914
+ func handleUpdateOSCError (openstackCluster * infrav1.OpenStackCluster , message error , isFatal bool ) {
915
+ if isFatal {
916
+ err := capierrors .UpdateClusterError
917
+ openstackCluster .Status .FailureReason = & err
918
+ openstackCluster .Status .FailureMessage = ptr .To (message .Error ())
919
+ }
919
920
}
920
921
921
922
// getClusterSubnets retrieves the subnets based on the Subnet filters specified on OpenstackCluster.
@@ -941,7 +942,7 @@ func getClusterSubnets(networkingService *networking.Service, openStackCluster *
941
942
if err != nil {
942
943
err = fmt .Errorf ("failed to find subnets: %w" , err )
943
944
if errors .Is (err , capoerrors .ErrFilterMatch ) {
944
- handleUpdateOSCError (openStackCluster , err )
945
+ handleUpdateOSCError (openStackCluster , err , true )
945
946
}
946
947
return nil , err
947
948
}
@@ -954,7 +955,7 @@ func getClusterSubnets(networkingService *networking.Service, openStackCluster *
954
955
if err != nil {
955
956
err = fmt .Errorf ("failed to find subnet %d in network %s: %w" , subnet , networkID , err )
956
957
if errors .Is (err , capoerrors .ErrFilterMatch ) {
957
- handleUpdateOSCError (openStackCluster , err )
958
+ handleUpdateOSCError (openStackCluster , err , true )
958
959
}
959
960
return nil , err
960
961
}
0 commit comments