@@ -42,6 +42,7 @@ import (
42
42
"sigs.k8s.io/controller-runtime/pkg/client"
43
43
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
44
44
"sigs.k8s.io/controller-runtime/pkg/controller"
45
+ "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
45
46
"sigs.k8s.io/kustomize/api/filesys"
46
47
"sigs.k8s.io/kustomize/api/krusty"
47
48
kustypes "sigs.k8s.io/kustomize/api/types"
@@ -83,47 +84,18 @@ func (r *KustomizationReconciler) Reconcile(req ctrl.Request) (ctrl.Result, erro
83
84
84
85
log := r .Log .WithValues ("controller" , strings .ToLower (kustomizev1 .KustomizationKind ), "request" , req .NamespacedName )
85
86
86
- // Examine if the object is under deletion
87
- if kustomization .ObjectMeta .DeletionTimestamp .IsZero () {
88
- // The object is not being deleted, so if it does not have our finalizer,
89
- // then lets add the finalizer and update the object. This is equivalent
90
- // registering our finalizer.
91
- if ! containsString (kustomization .ObjectMeta .Finalizers , kustomizev1 .KustomizationFinalizer ) {
92
- kustomization .ObjectMeta .Finalizers = append (kustomization .ObjectMeta .Finalizers , kustomizev1 .KustomizationFinalizer )
93
- if err := r .Update (ctx , & kustomization ); err != nil {
94
- log .Error (err , "unable to register finalizer" )
95
- return ctrl.Result {}, err
96
- }
87
+ // Add our finalizer if it does not exist
88
+ if ! controllerutil .ContainsFinalizer (& kustomization , kustomizev1 .KustomizationFinalizer ) {
89
+ controllerutil .AddFinalizer (& kustomization , kustomizev1 .KustomizationFinalizer )
90
+ if err := r .Update (ctx , & kustomization ); err != nil {
91
+ log .Error (err , "unable to register finalizer" )
92
+ return ctrl.Result {}, err
97
93
}
98
- } else {
99
- // The object is being deleted
100
- if containsString (kustomization .ObjectMeta .Finalizers , kustomizev1 .KustomizationFinalizer ) {
101
- // Our finalizer is still present, so lets handle garbage collection
102
- if kustomization .Spec .Prune && ! kustomization .Spec .Suspend {
103
- // create any necessary kube-clients
104
- client , _ , err := r .newKustomizationClient (kustomization )
105
- if err != nil {
106
- err = fmt .Errorf ("Failed to build kube client for Kustomization: %w" , err )
107
- log .Error (err , "Unable to prune for finalizer" )
108
- return ctrl.Result {}, err
109
- }
110
- if err := r .prune (client , kustomization , kustomization .Status .Snapshot , true ); err != nil {
111
- r .event (kustomization , kustomization .Status .LastAppliedRevision , events .EventSeverityError , "pruning for deleted resource failed" , nil )
112
- // Return the error so we retry the failed garbage collection
113
- return ctrl.Result {}, err
114
- }
115
- }
116
- // Record deleted status
117
- r .recordReadiness (kustomization , true )
94
+ }
118
95
119
- // Remove our finalizer from the list and update it
120
- kustomization .ObjectMeta .Finalizers = removeString (kustomization .ObjectMeta .Finalizers , kustomizev1 .KustomizationFinalizer )
121
- if err := r .Update (ctx , & kustomization ); err != nil {
122
- return ctrl.Result {}, err
123
- }
124
- // Stop reconciliation as the object is being deleted
125
- return ctrl.Result {}, nil
126
- }
96
+ // Examine if the object is under deletion
97
+ if ! kustomization .ObjectMeta .DeletionTimestamp .IsZero () {
98
+ return r .reconcileDelete (ctx , log , kustomization )
127
99
}
128
100
129
101
if kustomization .Spec .Suspend {
@@ -517,6 +489,35 @@ func (r *KustomizationReconciler) build(kustomization kustomizev1.Kustomization,
517
489
return kustomizev1 .NewSnapshot (resources , checksum )
518
490
}
519
491
492
+ func (r * KustomizationReconciler ) reconcileDelete (ctx context.Context , log logr.Logger , kustomization kustomizev1.Kustomization ) (ctrl.Result , error ) {
493
+ if kustomization .Spec .Prune && ! kustomization .Spec .Suspend {
494
+ // create any necessary kube-clients
495
+ client , _ , err := r .newKustomizationClient (kustomization )
496
+ if err != nil {
497
+ err = fmt .Errorf ("failed to build kube client for Kustomization: %w" , err )
498
+ log .Error (err , "Unable to prune for finalizer" )
499
+ return ctrl.Result {}, err
500
+ }
501
+ if err := r .prune (client , kustomization , kustomization .Status .Snapshot , true ); err != nil {
502
+ r .event (kustomization , kustomization .Status .LastAppliedRevision , events .EventSeverityError , "pruning for deleted resource failed" , nil )
503
+ // Return the error so we retry the failed garbage collection
504
+ return ctrl.Result {}, err
505
+ }
506
+ }
507
+
508
+ // Record deleted status
509
+ r .recordReadiness (kustomization , true )
510
+
511
+ // Remove our finalizer from the list and update it
512
+ controllerutil .RemoveFinalizer (& kustomization , kustomizev1 .KustomizationFinalizer )
513
+ if err := r .Update (ctx , & kustomization ); err != nil {
514
+ return ctrl.Result {}, err
515
+ }
516
+
517
+ // Stop reconciliation as the object is being deleted
518
+ return ctrl.Result {}, nil
519
+ }
520
+
520
521
func (r * KustomizationReconciler ) validate (kustomization kustomizev1.Kustomization , dirPath string ) error {
521
522
if kustomization .Spec .Validation == "" {
522
523
return nil
@@ -904,13 +905,3 @@ func containsString(slice []string, s string) bool {
904
905
}
905
906
return false
906
907
}
907
-
908
- func removeString (slice []string , s string ) (result []string ) {
909
- for _ , item := range slice {
910
- if item == s {
911
- continue
912
- }
913
- result = append (result , item )
914
- }
915
- return
916
- }
0 commit comments