From aa2bc6afddba4939c837a7a83e9825cb050c1c2f Mon Sep 17 00:00:00 2001 From: Alvaro Aleman Date: Sun, 10 Sep 2023 15:52:15 -0400 Subject: [PATCH] Rework code to pass object back on status update --- pkg/client/fake/client.go | 13 +++---------- pkg/client/fake/client_test.go | 23 ++++++++++++++--------- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/pkg/client/fake/client.go b/pkg/client/fake/client.go index d4a47c0974..d70237e950 100644 --- a/pkg/client/fake/client.go +++ b/pkg/client/fake/client.go @@ -403,8 +403,9 @@ func (t versionedTracker) update(gvr schema.GroupVersionResource, obj runtime.Ob if err := copyStatusFrom(obj, oldObject); err != nil { return fmt.Errorf("failed to copy non-status field for object with status subresouce: %w", err) } - - obj = oldObject.DeepCopyObject().(client.Object) + passedRV := accessor.GetResourceVersion() + reflect.ValueOf(obj).Elem().Set(reflect.ValueOf(oldObject.DeepCopyObject()).Elem()) + accessor.SetResourceVersion(passedRV) } else { // copy status from original object if err := copyStatusFrom(oldObject, obj); err != nil { return fmt.Errorf("failed to copy the status for object with status subresource: %w", err) @@ -437,14 +438,6 @@ func (t versionedTracker) update(gvr schema.GroupVersionResource, obj runtime.Ob intResourceVersion++ accessor.SetResourceVersion(strconv.FormatUint(intResourceVersion, 10)) - // obtain the current obj accessor's pointer, - // so we can make an update on the current obj - currentAccessor, err := meta.Accessor(obj) - if err != nil { - return fmt.Errorf("failed to get accessor for object: %w", err) - } - currentAccessor.SetResourceVersion(strconv.FormatUint(intResourceVersion, 10)) - if !deleting && !deletionTimestampEqual(accessor, oldAccessor) { return fmt.Errorf("error: Unable to edit %s: metadata.deletionTimestamp field is immutable", accessor.GetName()) } diff --git a/pkg/client/fake/client_test.go b/pkg/client/fake/client_test.go index f2ebf6ce60..bc857d7be8 100644 --- a/pkg/client/fake/client_test.go +++ b/pkg/client/fake/client_test.go @@ -45,6 +45,11 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client/interceptor" ) +const ( + machineIDFromStatusUpdate = "machine-id-from-status-update" + cidrFromStatusUpdate = "cidr-from-status-update" +) + var _ = Describe("Fake client", func() { var dep *appsv1.Deployment var dep2 *appsv1.Deployment @@ -1456,7 +1461,7 @@ var _ = Describe("Fake client", func() { cl := NewClientBuilder().WithStatusSubresource(obj).WithObjects(obj).Build() objOriginal := obj.DeepCopy() - obj.Spec.PodCIDR = "cidr-from-status-update" + obj.Spec.PodCIDR = cidrFromStatusUpdate obj.Annotations = map[string]string{ "some-annotation-key": "some-annotation-value", } @@ -1464,7 +1469,7 @@ var _ = Describe("Fake client", func() { "some-label-key": "some-label-value", } - obj.Status.NodeInfo.MachineID = "machine-id-from-status-update" + obj.Status.NodeInfo.MachineID = machineIDFromStatusUpdate Expect(cl.Status().Update(context.Background(), obj)).NotTo(HaveOccurred()) actual := &corev1.Node{ObjectMeta: metav1.ObjectMeta{Name: obj.Name}} @@ -1473,7 +1478,7 @@ var _ = Describe("Fake client", func() { objOriginal.APIVersion = actual.APIVersion objOriginal.Kind = actual.Kind objOriginal.ResourceVersion = actual.ResourceVersion - objOriginal.Status.NodeInfo.MachineID = "machine-id-from-status-update" + objOriginal.Status.NodeInfo.MachineID = machineIDFromStatusUpdate Expect(cmp.Diff(objOriginal, actual)).To(BeEmpty()) }) @@ -1494,7 +1499,7 @@ var _ = Describe("Fake client", func() { cl := NewClientBuilder().WithStatusSubresource(obj).WithObjects(obj).Build() expectedObj := obj.DeepCopy() - obj.Status.NodeInfo.MachineID = "machine-id-from-status-update" + obj.Status.NodeInfo.MachineID = machineIDFromStatusUpdate Expect(cl.Status().Update(context.Background(), obj)).NotTo(HaveOccurred()) obj.Annotations = map[string]string{ @@ -1511,7 +1516,7 @@ var _ = Describe("Fake client", func() { expectedObj.APIVersion = actual.APIVersion expectedObj.Kind = actual.Kind expectedObj.ResourceVersion = actual.ResourceVersion - expectedObj.Status.NodeInfo.MachineID = "machine-id-from-status-update" + expectedObj.Status.NodeInfo.MachineID = machineIDFromStatusUpdate Expect(cmp.Diff(expectedObj, actual)).To(BeEmpty()) }) @@ -1540,8 +1545,8 @@ var _ = Describe("Fake client", func() { } Expect(cl.Update(context.Background(), obj)).NotTo(HaveOccurred()) - obj.Spec.PodCIDR = "cidr-from-status-update" - obj.Status.NodeInfo.MachineID = "machine-id-from-status-update" + obj.Spec.PodCIDR = cidrFromStatusUpdate + obj.Status.NodeInfo.MachineID = machineIDFromStatusUpdate Expect(cl.Status().Update(context.Background(), obj)).NotTo(HaveOccurred()) actual := &corev1.Node{ObjectMeta: metav1.ObjectMeta{Name: obj.Name}} @@ -1550,7 +1555,7 @@ var _ = Describe("Fake client", func() { expectedObj.APIVersion = actual.APIVersion expectedObj.Kind = actual.Kind expectedObj.ResourceVersion = actual.ResourceVersion - expectedObj.Status.NodeInfo.MachineID = "machine-id-from-status-update" + expectedObj.Status.NodeInfo.MachineID = machineIDFromStatusUpdate Expect(cmp.Diff(expectedObj, actual)).To(BeEmpty()) }) @@ -1614,7 +1619,7 @@ var _ = Describe("Fake client", func() { cl := NewClientBuilder().WithStatusSubresource(obj).WithObjects(obj).Build() objOriginal := obj.DeepCopy() - obj.Spec.PodCIDR = "cidr-from-status-update" + obj.Spec.PodCIDR = cidrFromStatusUpdate obj.Status.NodeInfo.MachineID = "machine-id" Expect(cl.Status().Patch(context.Background(), obj, client.MergeFrom(objOriginal))).NotTo(HaveOccurred())