From f23382c2deb7ccf37b953af3d745dc082c46268a Mon Sep 17 00:00:00 2001 From: YuChen Date: Tue, 27 Feb 2024 14:25:51 -0800 Subject: [PATCH 1/7] enable deep json merge for k8s resources Signed-off-by: YuChen --- .../operandrequest/reconcile_operand.go | 79 +++++++++---------- 1 file changed, 37 insertions(+), 42 deletions(-) diff --git a/controllers/operandrequest/reconcile_operand.go b/controllers/operandrequest/reconcile_operand.go index 1b938a17..c7fdd1ca 100644 --- a/controllers/operandrequest/reconcile_operand.go +++ b/controllers/operandrequest/reconcile_operand.go @@ -771,12 +771,12 @@ func (r *Reconciler) updateCustomResource(ctx context.Context, existingCR unstru // Merge spec from update existing CR and OperandConfig spec updatedCRSpec := util.MergeCR(updatedExistingCRRaw, crConfig) - CRgeneration := existingCR.GetGeneration() - if reflect.DeepEqual(existingCR.Object["spec"], updatedCRSpec) && !forceUpdate { return true, nil } + CRgeneration := existingCR.GetGeneration() + klog.V(2).Infof("updating custom resource with apiversion: %s, kind: %s, %s/%s", apiversion, kind, namespace, name) existingCR.Object["spec"] = updatedCRSpec @@ -1057,61 +1057,56 @@ func (r *Reconciler) updateK8sResource(ctx context.Context, existingK8sRes unstr return true, nil } - // isEqual := r.CheckAnnotation(existingK8sRes, newAnnotations) && r.CheckLabel(existingK8sRes, newLabels) if k8sResConfig != nil { - k8sResConfigDecoded := make(map[string]interface{}) - k8sResConfigUnmarshalErr := json.Unmarshal(k8sResConfig.Raw, &k8sResConfigDecoded) - if k8sResConfigUnmarshalErr != nil { - klog.Errorf("failed to unmarshal k8s Resource Config: %v", k8sResConfigUnmarshalErr) - } - for k, v := range k8sResConfigDecoded { - // isEqual = isEqual && reflect.DeepEqual(existingK8sRes.Object[k], v) - existingK8sRes.Object[k] = v + existingK8sResRaw, err := json.Marshal(existingK8sRes.Object["spec"]) + if err != nil { + klog.Error(err) + return false, err } - } - CRgeneration := existingK8sRes.GetGeneration() + // Merge spec from existing CR and OperandConfig spec + updatedExistingK8sRes := util.MergeCR(existingK8sResRaw, k8sResConfig.Raw) - // if isEqual { - // return true, nil - // } + r.EnsureAnnotation(existingK8sRes, newAnnotations) + r.EnsureLabel(existingK8sRes, newLabels) - r.EnsureAnnotation(existingK8sRes, newAnnotations) - r.EnsureLabel(existingK8sRes, newLabels) - if err := r.setOwnerReferences(ctx, &existingK8sRes, ownerReferences); err != nil { - return false, errors.Wrapf(err, "failed to set ownerReferences for k8s resource -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) - } + if reflect.DeepEqual(existingK8sRes.Object["spec"], updatedExistingK8sRes) { + return true, nil + } - klog.V(2).Infof("updating k8s resource with apiversion: %s, kind: %s, %s/%s", apiversion, kind, namespace, name) + CRgeneration := existingK8sRes.GetGeneration() - err = r.Update(ctx, &existingK8sRes) + klog.V(2).Infof("updating k8s resource with apiversion: %s, kind: %s, %s/%s", apiversion, kind, namespace, name) - if err != nil { - return false, errors.Wrapf(err, "failed to update k8s resource -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) - } + existingK8sRes.Object["spec"] = updatedExistingK8sRes + err = r.Update(ctx, &existingK8sRes) - UpdatedK8sRes := unstructured.Unstructured{ - Object: map[string]interface{}{ - "apiVersion": apiversion, - "kind": kind, - }, - } + if err != nil { + return false, errors.Wrapf(err, "failed to update k8s resource -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) + } - err = r.Client.Get(ctx, types.NamespacedName{ - Name: name, - Namespace: namespace, - }, &UpdatedK8sRes) + UpdatedK8sRes := unstructured.Unstructured{ + Object: map[string]interface{}{ + "apiVersion": apiversion, + "kind": kind, + }, + } - if err != nil { - return false, errors.Wrapf(err, "failed to get k8s resource -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) + err = r.Client.Get(ctx, types.NamespacedName{ + Name: name, + Namespace: namespace, + }, &UpdatedK8sRes) - } + if err != nil { + return false, errors.Wrapf(err, "failed to get k8s resource -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) - if UpdatedK8sRes.GetGeneration() != CRgeneration { - klog.V(2).Infof("Finish updating the k8s Resource: -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) - } + } + if UpdatedK8sRes.GetGeneration() != CRgeneration { + klog.V(2).Infof("Finish updating the k8s Resource: -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) + } + } return true, nil }) From 73450a46622b77336682de431dd37ed9d1ff7c9a Mon Sep 17 00:00:00 2001 From: YuChen Date: Sun, 10 Mar 2024 19:07:29 -0700 Subject: [PATCH 2/7] fix deep merge for resource spec Signed-off-by: YuChen --- controllers/operandrequest/reconcile_operand.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/controllers/operandrequest/reconcile_operand.go b/controllers/operandrequest/reconcile_operand.go index c7fdd1ca..4f2e7d81 100644 --- a/controllers/operandrequest/reconcile_operand.go +++ b/controllers/operandrequest/reconcile_operand.go @@ -1059,6 +1059,20 @@ func (r *Reconciler) updateK8sResource(ctx context.Context, existingK8sRes unstr if k8sResConfig != nil { + k8sResConfigDecoded := make(map[string]interface{}) + k8sResConfigUnmarshalErr := json.Unmarshal(k8sResConfig.Raw, &k8sResConfigDecoded) + if k8sResConfigUnmarshalErr != nil { + klog.Errorf("failed to unmarshal k8s Resource Config: %v", k8sResConfigUnmarshalErr) + } + + // Convert k8s resource spec in OperandConfig to string + k8sResConfigRaw, err := json.Marshal(k8sResConfigDecoded["spec"]) + if err != nil { + klog.Error(err) + return false, err + } + + // Convert existing k8s resource spec to string existingK8sResRaw, err := json.Marshal(existingK8sRes.Object["spec"]) if err != nil { klog.Error(err) @@ -1066,7 +1080,7 @@ func (r *Reconciler) updateK8sResource(ctx context.Context, existingK8sRes unstr } // Merge spec from existing CR and OperandConfig spec - updatedExistingK8sRes := util.MergeCR(existingK8sResRaw, k8sResConfig.Raw) + updatedExistingK8sRes := util.MergeCR(existingK8sResRaw, k8sResConfigRaw) r.EnsureAnnotation(existingK8sRes, newAnnotations) r.EnsureLabel(existingK8sRes, newLabels) From 65e5ee80d13a93f9c15ca9347e266a1ae827505a Mon Sep 17 00:00:00 2001 From: YuChen Date: Mon, 11 Mar 2024 21:03:57 -0700 Subject: [PATCH 3/7] merge for all resrources type Signed-off-by: YuChen --- .../operandrequest/reconcile_operand.go | 91 ++++++++++--------- controllers/util/merge.go | 19 ++++ 2 files changed, 69 insertions(+), 41 deletions(-) diff --git a/controllers/operandrequest/reconcile_operand.go b/controllers/operandrequest/reconcile_operand.go index 4f2e7d81..fe29b19d 100644 --- a/controllers/operandrequest/reconcile_operand.go +++ b/controllers/operandrequest/reconcile_operand.go @@ -1065,60 +1065,69 @@ func (r *Reconciler) updateK8sResource(ctx context.Context, existingK8sRes unstr klog.Errorf("failed to unmarshal k8s Resource Config: %v", k8sResConfigUnmarshalErr) } - // Convert k8s resource spec in OperandConfig to string - k8sResConfigRaw, err := json.Marshal(k8sResConfigDecoded["spec"]) - if err != nil { - klog.Error(err) - return false, err - } + for key := range existingK8sRes.Object { + if _, ok := k8sResConfigDecoded[key]; !ok { + continue + } + if reflect.DeepEqual(existingK8sRes.Object[key], k8sResConfigDecoded[key]) { + continue + } - // Convert existing k8s resource spec to string - existingK8sResRaw, err := json.Marshal(existingK8sRes.Object["spec"]) - if err != nil { - klog.Error(err) - return false, err - } + // Convert k8s resource spec in OperandConfig to string + k8sResConfigRaw, err := json.Marshal(k8sResConfigDecoded[key]) + if err != nil { + klog.Error(err) + return false, err + } - // Merge spec from existing CR and OperandConfig spec - updatedExistingK8sRes := util.MergeCR(existingK8sResRaw, k8sResConfigRaw) + // Convert existing k8s resource spec to string + existingK8sResRaw, err := json.Marshal(existingK8sRes.Object[key]) + if err != nil { + klog.Error(err) + return false, err + } - r.EnsureAnnotation(existingK8sRes, newAnnotations) - r.EnsureLabel(existingK8sRes, newLabels) + // Merge spec from existing CR and OperandConfig spec + updatedExistingK8sRes := util.MergeCR(existingK8sResRaw, k8sResConfigRaw) - if reflect.DeepEqual(existingK8sRes.Object["spec"], updatedExistingK8sRes) { - return true, nil - } + r.EnsureAnnotation(existingK8sRes, newAnnotations) + r.EnsureLabel(existingK8sRes, newLabels) - CRgeneration := existingK8sRes.GetGeneration() + if reflect.DeepEqual(existingK8sRes.Object[key], updatedExistingK8sRes) { + return true, nil + } - klog.V(2).Infof("updating k8s resource with apiversion: %s, kind: %s, %s/%s", apiversion, kind, namespace, name) + CRgeneration := existingK8sRes.GetGeneration() - existingK8sRes.Object["spec"] = updatedExistingK8sRes - err = r.Update(ctx, &existingK8sRes) + klog.Infof("updating k8s resource with apiversion: %s, kind: %s, %s/%s", apiversion, kind, namespace, name) - if err != nil { - return false, errors.Wrapf(err, "failed to update k8s resource -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) - } + existingK8sRes.Object[key] = updatedExistingK8sRes + err = r.Update(ctx, &existingK8sRes) - UpdatedK8sRes := unstructured.Unstructured{ - Object: map[string]interface{}{ - "apiVersion": apiversion, - "kind": kind, - }, - } + if err != nil { + return false, errors.Wrapf(err, "failed to update k8s resource -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) + } - err = r.Client.Get(ctx, types.NamespacedName{ - Name: name, - Namespace: namespace, - }, &UpdatedK8sRes) + UpdatedK8sRes := unstructured.Unstructured{ + Object: map[string]interface{}{ + "apiVersion": apiversion, + "kind": kind, + }, + } - if err != nil { - return false, errors.Wrapf(err, "failed to get k8s resource -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) + err = r.Client.Get(ctx, types.NamespacedName{ + Name: name, + Namespace: namespace, + }, &UpdatedK8sRes) - } + if err != nil { + return false, errors.Wrapf(err, "failed to get k8s resource -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) - if UpdatedK8sRes.GetGeneration() != CRgeneration { - klog.V(2).Infof("Finish updating the k8s Resource: -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) + } + + if UpdatedK8sRes.GetGeneration() != CRgeneration { + klog.Infof("Finish updating the k8s Resource: -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) + } } } return true, nil diff --git a/controllers/util/merge.go b/controllers/util/merge.go index ab38645b..3a9aea47 100644 --- a/controllers/util/merge.go +++ b/controllers/util/merge.go @@ -72,6 +72,25 @@ func checkKeyBeforeMerging(key string, defaultMap interface{}, changedMap interf checkKeyBeforeMerging(newKey, defaultMapRef[newKey], changedMapRef[newKey], finalMap[key].(map[string]interface{})) } } + case []interface{}: + if changedMap == nil { + finalMap[key] = defaultMap + } else if _, ok := changedMap.([]interface{}); ok { //Check that the changed map value is also a slice []interface + defaultMapRef := defaultMap + changedMapRef := changedMap.([]interface{}) + for i := range defaultMapRef { + if _, ok := defaultMapRef[i].(map[string]interface{}); ok { + for newKey := range defaultMapRef[i].(map[string]interface{}) { + // check if the changedMapRef[i] is nil + if changedMapRef[i] == nil { + changedMapRef[i] = map[string]interface{}{} + } + checkKeyBeforeMerging(newKey, defaultMapRef[i].(map[string]interface{})[newKey], changedMapRef[i].(map[string]interface{})[newKey], finalMap[key].([]interface{})[i].(map[string]interface{})) + } + } + } + } + default: //Check if the value was set, otherwise set it if changedMap == nil { From 3a4a1a16c9e8853e71338b9b16cafe935f1ffa90 Mon Sep 17 00:00:00 2001 From: YuChen Date: Thu, 14 Mar 2024 10:55:08 -0700 Subject: [PATCH 4/7] each changed object updated once Signed-off-by: YuChen --- .../operandrequest/reconcile_operand.go | 48 ++++++++++--------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/controllers/operandrequest/reconcile_operand.go b/controllers/operandrequest/reconcile_operand.go index fe29b19d..4cbf795a 100644 --- a/controllers/operandrequest/reconcile_operand.go +++ b/controllers/operandrequest/reconcile_operand.go @@ -1094,41 +1094,43 @@ func (r *Reconciler) updateK8sResource(ctx context.Context, existingK8sRes unstr r.EnsureLabel(existingK8sRes, newLabels) if reflect.DeepEqual(existingK8sRes.Object[key], updatedExistingK8sRes) { - return true, nil + continue } - CRgeneration := existingK8sRes.GetGeneration() - klog.Infof("updating k8s resource with apiversion: %s, kind: %s, %s/%s", apiversion, kind, namespace, name) existingK8sRes.Object[key] = updatedExistingK8sRes - err = r.Update(ctx, &existingK8sRes) + } - if err != nil { - return false, errors.Wrapf(err, "failed to update k8s resource -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) - } + CRgeneration := existingK8sRes.GetGeneration() - UpdatedK8sRes := unstructured.Unstructured{ - Object: map[string]interface{}{ - "apiVersion": apiversion, - "kind": kind, - }, - } + err = r.Update(ctx, &existingK8sRes) - err = r.Client.Get(ctx, types.NamespacedName{ - Name: name, - Namespace: namespace, - }, &UpdatedK8sRes) + if err != nil { + return false, errors.Wrapf(err, "failed to update k8s resource -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) + } - if err != nil { - return false, errors.Wrapf(err, "failed to get k8s resource -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) + UpdatedK8sRes := unstructured.Unstructured{ + Object: map[string]interface{}{ + "apiVersion": apiversion, + "kind": kind, + }, + } - } + err = r.Client.Get(ctx, types.NamespacedName{ + Name: name, + Namespace: namespace, + }, &UpdatedK8sRes) + + if err != nil { + return false, errors.Wrapf(err, "failed to get k8s resource -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) - if UpdatedK8sRes.GetGeneration() != CRgeneration { - klog.Infof("Finish updating the k8s Resource: -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) - } } + + if UpdatedK8sRes.GetGeneration() != CRgeneration { + klog.Infof("Finish updating the k8s Resource: -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) + } + } return true, nil }) From 9705c956c38edf8d8956c1cb1605b7c087cd8a3d Mon Sep 17 00:00:00 2001 From: YuChen Date: Mon, 25 Mar 2024 14:10:26 -0700 Subject: [PATCH 5/7] compare whole resrouces file instead of spec section Signed-off-by: YuChen --- .../operandrequest/reconcile_operand.go | 48 ++++++------------- controllers/util/merge.go | 12 ++--- 2 files changed, 21 insertions(+), 39 deletions(-) diff --git a/controllers/operandrequest/reconcile_operand.go b/controllers/operandrequest/reconcile_operand.go index 4cbf795a..25465e2d 100644 --- a/controllers/operandrequest/reconcile_operand.go +++ b/controllers/operandrequest/reconcile_operand.go @@ -1065,42 +1065,25 @@ func (r *Reconciler) updateK8sResource(ctx context.Context, existingK8sRes unstr klog.Errorf("failed to unmarshal k8s Resource Config: %v", k8sResConfigUnmarshalErr) } - for key := range existingK8sRes.Object { - if _, ok := k8sResConfigDecoded[key]; !ok { - continue - } - if reflect.DeepEqual(existingK8sRes.Object[key], k8sResConfigDecoded[key]) { - continue - } - - // Convert k8s resource spec in OperandConfig to string - k8sResConfigRaw, err := json.Marshal(k8sResConfigDecoded[key]) - if err != nil { - klog.Error(err) - return false, err - } - - // Convert existing k8s resource spec to string - existingK8sResRaw, err := json.Marshal(existingK8sRes.Object[key]) - if err != nil { - klog.Error(err) - return false, err - } + // Convert existing k8s resource spec to string + existingK8sResRaw, err := json.Marshal(existingK8sRes.Object) + if err != nil { + klog.Error(err) + return false, err + } - // Merge spec from existing CR and OperandConfig spec - updatedExistingK8sRes := util.MergeCR(existingK8sResRaw, k8sResConfigRaw) + // Merge spec from existing CR and OperandConfig spec + updatedExistingK8sRes := util.MergeCR(existingK8sResRaw, k8sResConfig.Raw) - r.EnsureAnnotation(existingK8sRes, newAnnotations) - r.EnsureLabel(existingK8sRes, newLabels) + r.EnsureAnnotation(existingK8sRes, newAnnotations) + r.EnsureLabel(existingK8sRes, newLabels) - if reflect.DeepEqual(existingK8sRes.Object[key], updatedExistingK8sRes) { - continue - } - - klog.Infof("updating k8s resource with apiversion: %s, kind: %s, %s/%s", apiversion, kind, namespace, name) - - existingK8sRes.Object[key] = updatedExistingK8sRes + if reflect.DeepEqual(existingK8sRes.Object, updatedExistingK8sRes) { + return true, nil } + klog.Infof("updating k8s resource with apiversion: %s, kind: %s, %s/%s", apiversion, kind, namespace, name) + + existingK8sRes.Object = updatedExistingK8sRes CRgeneration := existingK8sRes.GetGeneration() @@ -1130,7 +1113,6 @@ func (r *Reconciler) updateK8sResource(ctx context.Context, existingK8sRes unstr if UpdatedK8sRes.GetGeneration() != CRgeneration { klog.Infof("Finish updating the k8s Resource: -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) } - } return true, nil }) diff --git a/controllers/util/merge.go b/controllers/util/merge.go index 3a9aea47..0a8a5635 100644 --- a/controllers/util/merge.go +++ b/controllers/util/merge.go @@ -80,17 +80,17 @@ func checkKeyBeforeMerging(key string, defaultMap interface{}, changedMap interf changedMapRef := changedMap.([]interface{}) for i := range defaultMapRef { if _, ok := defaultMapRef[i].(map[string]interface{}); ok { - for newKey := range defaultMapRef[i].(map[string]interface{}) { - // check if the changedMapRef[i] is nil - if changedMapRef[i] == nil { - changedMapRef[i] = map[string]interface{}{} + if len(changedMapRef) <= i { + finalMap[key] = append(finalMap[key].([]interface{}), defaultMapRef[i]) + } else { + + for newKey := range defaultMapRef[i].(map[string]interface{}) { + checkKeyBeforeMerging(newKey, defaultMapRef[i].(map[string]interface{})[newKey], changedMapRef[i].(map[string]interface{})[newKey], finalMap[key].([]interface{})[i].(map[string]interface{})) } - checkKeyBeforeMerging(newKey, defaultMapRef[i].(map[string]interface{})[newKey], changedMapRef[i].(map[string]interface{})[newKey], finalMap[key].([]interface{})[i].(map[string]interface{})) } } } } - default: //Check if the value was set, otherwise set it if changedMap == nil { From b59fd58d5ac5a5cc2611b9bd0adf8201ef86dd0c Mon Sep 17 00:00:00 2001 From: YuChen Date: Mon, 25 Mar 2024 14:26:24 -0700 Subject: [PATCH 6/7] set ownerreferences Signed-off-by: YuChen --- controllers/operandrequest/reconcile_operand.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/controllers/operandrequest/reconcile_operand.go b/controllers/operandrequest/reconcile_operand.go index 25465e2d..69fa6442 100644 --- a/controllers/operandrequest/reconcile_operand.go +++ b/controllers/operandrequest/reconcile_operand.go @@ -1077,6 +1077,9 @@ func (r *Reconciler) updateK8sResource(ctx context.Context, existingK8sRes unstr r.EnsureAnnotation(existingK8sRes, newAnnotations) r.EnsureLabel(existingK8sRes, newLabels) + if err := r.setOwnerReferences(ctx, &existingK8sRes, ownerReferences); err != nil { + return false, errors.Wrapf(err, "failed to set ownerReferences for k8s resource -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) + } if reflect.DeepEqual(existingK8sRes.Object, updatedExistingK8sRes) { return true, nil From 2e86588c565aab21f9d992efece3f1206f1e217f Mon Sep 17 00:00:00 2001 From: YuChen Date: Tue, 26 Mar 2024 20:22:48 -0700 Subject: [PATCH 7/7] ensure ann, label and set owner on updated resrouce Signed-off-by: YuChen --- .../operandrequest/reconcile_operand.go | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/controllers/operandrequest/reconcile_operand.go b/controllers/operandrequest/reconcile_operand.go index 69fa6442..35b922b0 100644 --- a/controllers/operandrequest/reconcile_operand.go +++ b/controllers/operandrequest/reconcile_operand.go @@ -28,6 +28,7 @@ import ( "strings" "sync" + "github.com/mohae/deepcopy" olmv1alpha1 "github.com/operator-framework/api/pkg/operators/v1alpha1" "github.com/pkg/errors" authorizationv1 "k8s.io/api/authorization/v1" @@ -1059,34 +1060,33 @@ func (r *Reconciler) updateK8sResource(ctx context.Context, existingK8sRes unstr if k8sResConfig != nil { - k8sResConfigDecoded := make(map[string]interface{}) - k8sResConfigUnmarshalErr := json.Unmarshal(k8sResConfig.Raw, &k8sResConfigDecoded) - if k8sResConfigUnmarshalErr != nil { - klog.Errorf("failed to unmarshal k8s Resource Config: %v", k8sResConfigUnmarshalErr) - } - - // Convert existing k8s resource spec to string + // Convert existing k8s resource to string existingK8sResRaw, err := json.Marshal(existingK8sRes.Object) if err != nil { klog.Error(err) return false, err } - // Merge spec from existing CR and OperandConfig spec + // Merge the existing CR and the CR from the OperandConfig updatedExistingK8sRes := util.MergeCR(existingK8sResRaw, k8sResConfig.Raw) + // Deep copy the existing k8s resource + originalK8sRes := deepcopy.Copy(existingK8sRes.Object) + + // Update the existing k8s resource with the merged CR + existingK8sRes.Object = updatedExistingK8sRes + r.EnsureAnnotation(existingK8sRes, newAnnotations) r.EnsureLabel(existingK8sRes, newLabels) if err := r.setOwnerReferences(ctx, &existingK8sRes, ownerReferences); err != nil { return false, errors.Wrapf(err, "failed to set ownerReferences for k8s resource -- Kind: %s, NamespacedName: %s/%s", kind, namespace, name) } - if reflect.DeepEqual(existingK8sRes.Object, updatedExistingK8sRes) { + if reflect.DeepEqual(originalK8sRes, existingK8sRes.Object) { return true, nil } - klog.Infof("updating k8s resource with apiversion: %s, kind: %s, %s/%s", apiversion, kind, namespace, name) - existingK8sRes.Object = updatedExistingK8sRes + klog.Infof("updating k8s resource with apiversion: %s, kind: %s, %s/%s", apiversion, kind, namespace, name) CRgeneration := existingK8sRes.GetGeneration()