diff --git a/internal/controller/operator/factory/finalize/common.go b/internal/controller/operator/factory/finalize/common.go index 58d5cc6f8..a20a63a67 100644 --- a/internal/controller/operator/factory/finalize/common.go +++ b/internal/controller/operator/factory/finalize/common.go @@ -19,8 +19,6 @@ import ( ) type crObject interface { - GetLabels() map[string]string - SelectorLabels() map[string]string PrefixedName() string GetServiceAccountName() string AsOwner() metav1.OwnerReference @@ -110,62 +108,6 @@ func SafeDelete(ctx context.Context, rclient client.Client, r client.Object) err return nil } -// SafeDeleteForSelectorsWithFinalizer removes given object if it matches provided label selectors -func SafeDeleteForSelectorsWithFinalizer(ctx context.Context, rclient client.Client, r client.Object, selectors map[string]string, owner *metav1.OwnerReference) error { - objName, objNs := r.GetName(), r.GetNamespace() - if objName == "" || objNs == "" { - return fmt.Errorf("BUG: object name=%q or object namespace=%q cannot be empty", objName, objNs) - } - // reload object from API to properly remove finalizer - if err := rclient.Get(ctx, types.NamespacedName{ - Namespace: objNs, - Name: objName, - }, r); err != nil { - // fast path - if k8serrors.IsNotFound(err) { - return nil - } - return err - } - if !isLabelsMatchSelectors(r.GetLabels(), selectors) { - // object has a different set of labels - // most probably it is not managed by operator - return nil - } - if !canBeRemoved(r, owner) { - return nil - } - if err := RemoveFinalizer(ctx, rclient, r); err != nil { - if !k8serrors.IsNotFound(err) { - return err - } - return nil - } - if err := rclient.Delete(ctx, r); err != nil { - if !k8serrors.IsNotFound(err) { - return err - } - } - return nil -} - -func isLabelsMatchSelectors(objLabels map[string]string, selectorLabels map[string]string) bool { - for k, v := range selectorLabels { - isFound := false - objV, ok := objLabels[k] - if ok { - if objV != v { - return false - } - isFound = true - } - if !isFound { - return false - } - } - return true -} - // SafeDeleteWithFinalizer removes object, ignores notfound error. func SafeDeleteWithFinalizer(ctx context.Context, rclient client.Client, r client.Object, owner *metav1.OwnerReference) error { objName, objNs := r.GetName(), r.GetNamespace() @@ -202,7 +144,7 @@ func SafeDeleteWithFinalizer(ctx context.Context, rclient client.Client, r clien func deleteSA(ctx context.Context, rclient client.Client, cr crObject) error { owner := cr.AsOwner() sa := &corev1.ServiceAccount{ObjectMeta: metav1.ObjectMeta{Namespace: cr.GetNamespace(), Name: cr.GetServiceAccountName()}} - return SafeDeleteForSelectorsWithFinalizer(ctx, rclient, sa, cr.SelectorLabels(), &owner) + return SafeDeleteWithFinalizer(ctx, rclient, sa, &owner) } func finalizePDB(ctx context.Context, rclient client.Client, cr crObject) error { @@ -216,11 +158,5 @@ func removeConfigReloaderRole(ctx context.Context, rclient client.Client, cr crO if err := removeFinalizeObjByName(ctx, rclient, &rbacv1.Role{}, cr.PrefixedName(), cr.GetNamespace()); err != nil { return err } - if err := SafeDelete(ctx, rclient, &rbacv1.RoleBinding{ObjectMeta: metav1.ObjectMeta{Name: cr.PrefixedName(), Namespace: cr.GetNamespace()}}); err != nil { - return err - } - if err := SafeDelete(ctx, rclient, &rbacv1.Role{ObjectMeta: metav1.ObjectMeta{Name: cr.PrefixedName(), Namespace: cr.GetNamespace()}}); err != nil { - return err - } return nil } diff --git a/internal/controller/operator/factory/finalize/vmagent.go b/internal/controller/operator/factory/finalize/vmagent.go index c43559637..b2cdb81d3 100644 --- a/internal/controller/operator/factory/finalize/vmagent.go +++ b/internal/controller/operator/factory/finalize/vmagent.go @@ -88,13 +88,6 @@ func OnVMAgentDelete(ctx context.Context, rclient client.Client, cr *vmv1beta1.V if err := removeFinalizeObjByName(ctx, rclient, &rbacv1.Role{}, cr.GetClusterRoleName(), cr.GetNamespace()); err != nil { return err } - if err := SafeDelete(ctx, rclient, &rbacv1.RoleBinding{ObjectMeta: metav1.ObjectMeta{Name: cr.GetClusterRoleName(), Namespace: cr.GetNamespace()}}); err != nil { - return err - } - - if err := SafeDelete(ctx, rclient, &rbacv1.Role{ObjectMeta: metav1.ObjectMeta{Name: cr.GetClusterRoleName(), Namespace: cr.GetNamespace()}}); err != nil { - return err - } } if cr.Spec.AdditionalScrapeConfigs != nil { diff --git a/internal/controller/operator/factory/finalize/vmauth.go b/internal/controller/operator/factory/finalize/vmauth.go index 197601b61..839b8a594 100644 --- a/internal/controller/operator/factory/finalize/vmauth.go +++ b/internal/controller/operator/factory/finalize/vmauth.go @@ -60,9 +60,6 @@ func OnVMAuthDelete(ctx context.Context, rclient client.Client, cr *vmv1beta1.VM if err := removeFinalizeObjByName(ctx, rclient, httpRoute, cr.PrefixedName(), cr.Namespace); err != nil { return err } - if err := SafeDelete(ctx, rclient, httpRoute); err != nil { - return err - } } // check HPA diff --git a/test/e2e/vmcluster_test.go b/test/e2e/vmcluster_test.go index fd6d347be..7826db88c 100644 --- a/test/e2e/vmcluster_test.go +++ b/test/e2e/vmcluster_test.go @@ -1509,8 +1509,8 @@ up{baz="bar"} 123 verify: func(cr *vmv1beta1.VMCluster) { By("checking that update process runs as configured") Eventually(func() int { - podList := &corev1.PodList{} - k8sClient.List(ctx, podList, &client.ListOptions{ + var podList corev1.PodList + k8sClient.List(ctx, &podList, &client.ListOptions{ Namespace: namespace, LabelSelector: labels.SelectorFromSet(cr.SelectorLabels(vmv1beta1.ClusterComponentStorage)), }) @@ -1520,14 +1520,16 @@ up{baz="bar"} 123 podsUpdated++ } } + return podsUpdated + }, eventualStatefulsetAppReadyTimeout).Should(BeNumerically("==", 4)) + Eventually(func() int32 { var pdb policyv1.PodDisruptionBudget k8sClient.Get(ctx, types.NamespacedName{ Namespace: namespace, Name: cr.PrefixedName(vmv1beta1.ClusterComponentStorage), }, &pdb) - Expect(pdb.Status.CurrentHealthy).To(BeNumerically(">=", 3), "at least 3 pods should be healthy during the update") - return podsUpdated - }, eventualStatefulsetAppReadyTimeout).Should(BeNumerically("==", 4)) + return pdb.Status.CurrentHealthy + }, eventualStatefulsetAppReadyTimeout).Should(BeNumerically(">=", 3)) }, }, ),