@@ -24,7 +24,6 @@ import (
24
24
k8serrors "k8s.io/apimachinery/pkg/api/errors"
25
25
"k8s.io/apimachinery/pkg/runtime"
26
26
"k8s.io/client-go/tools/record"
27
- "k8s.io/utils/strings/slices"
28
27
ctrl "sigs.k8s.io/controller-runtime"
29
28
"sigs.k8s.io/controller-runtime/pkg/builder"
30
29
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -208,7 +207,7 @@ func (r *AWSVPCPeeringReconciler) handleUpdatePeering(
208
207
}
209
208
210
209
if aws .Annotations [models .ExternalChangesAnnotation ] == models .True {
211
- if ! slices . Equal (instaAWSPeering .PeerSubnets , aws .Spec .PeerSubnets ) {
210
+ if ! subnetsEqual (instaAWSPeering .PeerSubnets , aws .Spec .PeerSubnets ) {
212
211
l .Info ("The resource specification still differs from the Instaclustr resource specification, please reconcile it manually" ,
213
212
"AWS VPC ID" , aws .Status .ID ,
214
213
"k8s peerSubnets" , aws .Spec .PeerSubnets ,
@@ -404,8 +403,7 @@ func (r *AWSVPCPeeringReconciler) newWatchStatusJob(awsPeering *v1beta1.AWSVPCPe
404
403
instaAWSPeering , err := r .API .GetAWSVPCPeering (awsPeering .Status .ID )
405
404
if err != nil {
406
405
if errors .Is (err , instaclustr .NotFound ) {
407
- l .Info ("The resource has been deleted on Instaclustr, deleting resource in k8s..." )
408
- return r .Delete (ctx , awsPeering )
406
+ return r .handleExternalDelete (ctx , awsPeering )
409
407
}
410
408
411
409
l .Error (err , "cannot get AWS VPC Peering Status from Inst API" ,
@@ -432,9 +430,20 @@ func (r *AWSVPCPeeringReconciler) newWatchStatusJob(awsPeering *v1beta1.AWSVPCPe
432
430
}
433
431
}
434
432
433
+ if awsPeering .Status .StatusCode == models .AWSVPCPeeringStatusCodeDeleted {
434
+ l .Info ("The AWSPeering was deleted on AWS, stopping job..." )
435
+ r .EventRecorder .Event (awsPeering , models .Warning , models .DeletedEvent ,
436
+ "The AWSPeering was deleted on AWS, stopping job..." ,
437
+ )
438
+
439
+ r .Scheduler .RemoveJob (awsPeering .GetJobID (scheduler .StatusChecker ))
440
+
441
+ return nil
442
+ }
443
+
435
444
if awsPeering .Annotations [models .ResourceStateAnnotation ] != models .UpdatingEvent &&
436
445
awsPeering .Annotations [models .ExternalChangesAnnotation ] != models .True &&
437
- ! slices . Equal (instaAWSPeering .PeerSubnets , awsPeering .Spec .PeerSubnets ) {
446
+ ! subnetsEqual (instaAWSPeering .PeerSubnets , awsPeering .Spec .PeerSubnets ) {
438
447
l .Info ("The k8s resource specification doesn't match the specification of Instaclustr, please change it manually" ,
439
448
"k8s peerSubnets" , instaAWSPeering .PeerSubnets ,
440
449
"instaclutr peerSubnets" , awsPeering .Spec .PeerSubnets ,
@@ -498,3 +507,21 @@ func (r *AWSVPCPeeringReconciler) SetupWithManager(mgr ctrl.Manager) error {
498
507
},
499
508
})).Complete (r )
500
509
}
510
+
511
+ func (r * AWSVPCPeeringReconciler ) handleExternalDelete (ctx context.Context , key * v1beta1.AWSVPCPeering ) error {
512
+ l := log .FromContext (ctx )
513
+
514
+ patch := key .NewPatch ()
515
+ key .Status .StatusCode = models .DeletedStatus
516
+ err := r .Status ().Patch (ctx , key , patch )
517
+ if err != nil {
518
+ return err
519
+ }
520
+
521
+ l .Info (instaclustr .MsgInstaclustrResourceNotFound )
522
+ r .EventRecorder .Eventf (key , models .Warning , models .ExternalDeleted , instaclustr .MsgInstaclustrResourceNotFound )
523
+
524
+ r .Scheduler .RemoveJob (key .GetJobID (scheduler .StatusChecker ))
525
+
526
+ return nil
527
+ }
0 commit comments