@@ -20,6 +20,7 @@ import (
2020 "context"
2121
2222 "k8s.io/apimachinery/pkg/api/errors"
23+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2324 "k8s.io/apimachinery/pkg/runtime"
2425 "k8s.io/klog"
2526 clusterv1 "sigs.k8s.io/cluster-api/pkg/apis/cluster/v1alpha1"
@@ -86,20 +87,31 @@ func (r *ReconcileCluster) Reconcile(request reconcile.Request) (reconcile.Resul
8687 }
8788
8889 name := cluster .Name
89- klog .Infof ("Running reconcile Cluster for %s \n " , name )
90+ klog .Infof ("Running reconcile Cluster for %q " , name )
9091
9192 // If object hasn't been deleted and doesn't have a finalizer, add one
9293 // Add a finalizer to newly created objects.
93- if cluster .ObjectMeta .DeletionTimestamp .IsZero () &&
94- ! util .Contains (cluster .ObjectMeta .Finalizers , clusterv1 .ClusterFinalizer ) {
95- cluster .Finalizers = append (cluster .Finalizers , clusterv1 .ClusterFinalizer )
96- if err = r .Update (context .Background (), cluster ); err != nil {
97- klog .Infof ("failed to add finalizer to cluster object %v due to error %v." , name , err )
98- return reconcile.Result {}, err
94+ if cluster .ObjectMeta .DeletionTimestamp .IsZero () {
95+ finalizerCount := len (cluster .Finalizers )
96+
97+ if ! util .Contains (cluster .Finalizers , metav1 .FinalizerDeleteDependents ) {
98+ cluster .Finalizers = append (cluster .ObjectMeta .Finalizers , metav1 .FinalizerDeleteDependents )
99+ }
100+
101+ if ! util .Contains (cluster .Finalizers , clusterv1 .ClusterFinalizer ) {
102+ cluster .Finalizers = append (cluster .ObjectMeta .Finalizers , clusterv1 .ClusterFinalizer )
103+ }
104+
105+ if len (cluster .Finalizers ) > finalizerCount {
106+ if err := r .Update (context .Background (), cluster ); err != nil {
107+ klog .Infof ("Failed to add finalizer to cluster %q: %v" , name , err )
108+ return reconcile.Result {}, err
109+ }
110+
111+ // Since adding the finalizer updates the object return to avoid later update issues.
112+ return reconcile.Result {Requeue : true }, nil
99113 }
100114
101- // Since adding the finalizer updates the object return to avoid later update issues
102- return reconcile.Result {}, nil
103115 }
104116
105117 if ! cluster .ObjectMeta .DeletionTimestamp .IsZero () {
0 commit comments