diff --git a/controllers/nodemaintenance_controller.go b/controllers/nodemaintenance_controller.go index 668f1c8e..2ec344d2 100644 --- a/controllers/nodemaintenance_controller.go +++ b/controllers/nodemaintenance_controller.go @@ -148,8 +148,11 @@ func (r *NodeMaintenanceReconciler) Reconcile(ctx context.Context, req ctrl.Requ return emptyResult, nil } - err = initMaintenanceStatus(ctx, nm, drainer, r.Client) + err = initMaintenanceStatus(ctx, nm, drainer) if err != nil { + if errUpdate := r.Client.Status().Update(ctx, nm); errUpdate != nil { + err = fmt.Errorf("errUpdate %w - %w", errUpdate, err) + } r.logger.Error(err, "Failed to update NodeMaintenance with \"Running\" status") return r.onReconcileError(ctx, nm, drainer, err) } @@ -390,7 +393,7 @@ func (r *NodeMaintenanceReconciler) fetchNode(ctx context.Context, drainer *drai return node, nil } -func initMaintenanceStatus(ctx context.Context, nm *v1beta1.NodeMaintenance, drainer *drain.Helper, r client.Client) error { +func initMaintenanceStatus(ctx context.Context, nm *v1beta1.NodeMaintenance, drainer *drain.Helper) error { if nm.Status.Phase == "" { nm.Status.Phase = v1beta1.MaintenanceRunning setLastUpdate(nm) @@ -412,7 +415,6 @@ func initMaintenanceStatus(ctx context.Context, nm *v1beta1.NodeMaintenance, dra return err } nm.Status.TotalPods = len(podlist.Items) - err = r.Status().Update(ctx, nm) return err } return nil diff --git a/controllers/nodemaintenance_controller_test.go b/controllers/nodemaintenance_controller_test.go index 5c747ba2..e78d2e36 100644 --- a/controllers/nodemaintenance_controller_test.go +++ b/controllers/nodemaintenance_controller_test.go @@ -66,7 +66,7 @@ var _ = Describe("Node Maintenance", func() { }) When("Status was initalized", func() { It("should be set for running with 2 pods to drain", func() { - Expect(initMaintenanceStatus(ctx, nm, drainer, r.Client)).To(HaveOccurred()) + Expect(initMaintenanceStatus(ctx, nm, drainer)).To(Succeed()) // status was initialized but the function will fail on updating the CR status, since we don't create a nm CR here Expect(nm.Status.Phase).To(Equal(v1beta1.MaintenanceRunning)) Expect(len(nm.Status.PendingPods)).To(Equal(2)) @@ -78,7 +78,7 @@ var _ = Describe("Node Maintenance", func() { }) When("Owner ref was set", func() { It("should be set properly", func() { - Expect(initMaintenanceStatus(ctx, nm, drainer, r.Client)).To(HaveOccurred()) + Expect(initMaintenanceStatus(ctx, nm, drainer)).To(Succeed()) // status was initialized but the function will fail on updating the CR status, since we don't create a nm CR here By("Setting owner ref for a modified nm CR") node := &corev1.Node{} @@ -101,7 +101,7 @@ var _ = Describe("Node Maintenance", func() { It("Should not modify the CR after initalization", func() { nmCopy := nm.DeepCopy() nmCopy.Status.Phase = v1beta1.MaintenanceFailed - Expect(initMaintenanceStatus(ctx, nmCopy, drainer, r.Client)).To(Succeed()) + Expect(initMaintenanceStatus(ctx, nmCopy, drainer)).To(Succeed()) // status was not initialized thus the function succeeds Expect(nmCopy.Status.Phase).To(Equal(v1beta1.MaintenanceFailed)) Expect(len(nmCopy.Status.PendingPods)).To(Equal(0))