From 421010a60456f591f3cdc900e048f4cac53a3e7a Mon Sep 17 00:00:00 2001 From: LiZhenCheng9527 Date: Tue, 27 Feb 2024 16:53:25 +0800 Subject: [PATCH] The original label of the object is preserved in Patch Signed-off-by: LiZhenCheng9527 --- e2e/resources/attachedcluster.go | 12 +++++++++-- e2e/resources/fleet.go | 12 +++++++++-- e2e/resources/secret.go | 12 +++++++++-- e2e/resources/util.go | 37 +++++++++++++++++++++++++++++--- 4 files changed, 64 insertions(+), 9 deletions(-) diff --git a/e2e/resources/attachedcluster.go b/e2e/resources/attachedcluster.go index 6b64cdb1..ae5dd238 100644 --- a/e2e/resources/attachedcluster.go +++ b/e2e/resources/attachedcluster.go @@ -53,8 +53,16 @@ func CreateOrUpdateAttachedCluster(client kurator.Interface, attachedCluster *cl if getErr != nil { return getErr } - attachedCluster.ResourceVersion = originalAttachedCluster.ResourceVersion - attachedClusterPatchData, createPatchErr := CreatePatchData(originalAttachedCluster, attachedCluster) + modifiedObjectMeta := ModifiedObjectMeta(originalAttachedCluster.ObjectMeta, attachedCluster.ObjectMeta) + oldAttachedCluster := clusterv1a1.AttachedCluster{ + ObjectMeta: originalAttachedCluster.ObjectMeta, + Spec: originalAttachedCluster.Spec, + } + modAttachedCluster := clusterv1a1.AttachedCluster{ + ObjectMeta: modifiedObjectMeta, + Spec: attachedCluster.Spec, + } + attachedClusterPatchData, createPatchErr := CreatePatchData(oldAttachedCluster, modAttachedCluster) if createPatchErr != nil { return createPatchErr } diff --git a/e2e/resources/fleet.go b/e2e/resources/fleet.go index 60fc367b..2aae959d 100644 --- a/e2e/resources/fleet.go +++ b/e2e/resources/fleet.go @@ -55,8 +55,16 @@ func CreateOrUpdateFleet(client kurator.Interface, fleet *fleetv1a1.Fleet) error if getErr != nil { return getErr } - fleet.ResourceVersion = originalFleet.ResourceVersion - fleetPatchData, createPatchErr := CreatePatchData(originalFleet, fleet) + modifiedObjectMeta := ModifiedObjectMeta(originalFleet.ObjectMeta, fleet.ObjectMeta) + oldFleet := fleetv1a1.Fleet{ + ObjectMeta: originalFleet.ObjectMeta, + Spec: originalFleet.Spec, + } + modFleet := fleetv1a1.Fleet{ + ObjectMeta: modifiedObjectMeta, + Spec: fleet.Spec, + } + fleetPatchData, createPatchErr := CreatePatchData(oldFleet, modFleet) if createPatchErr != nil { return createPatchErr } diff --git a/e2e/resources/secret.go b/e2e/resources/secret.go index 221427b5..50d723a9 100644 --- a/e2e/resources/secret.go +++ b/e2e/resources/secret.go @@ -50,8 +50,16 @@ func CreateOrUpdateSecret(client kubernetes.Interface, secret *corev1.Secret) er if getErr != nil { return getErr } - secret.ResourceVersion = originalSecret.ResourceVersion - secretPatchData, createPatchErr := CreatePatchData(originalSecret, secret) + modifiedObjectMeta := ModifiedObjectMeta(originalSecret.ObjectMeta, secret.ObjectMeta) + oldSecret := corev1.Secret{ + ObjectMeta: originalSecret.ObjectMeta, + Data: originalSecret.Data, + } + modSecret := corev1.Secret{ + ObjectMeta: modifiedObjectMeta, + Data: secret.Data, + } + secretPatchData, createPatchErr := CreatePatchData(oldSecret, modSecret) if createPatchErr != nil { return createPatchErr } diff --git a/e2e/resources/util.go b/e2e/resources/util.go index cf1a322b..e50d3d95 100644 --- a/e2e/resources/util.go +++ b/e2e/resources/util.go @@ -20,14 +20,15 @@ import ( "encoding/json" jsonpatch "github.com/evanphx/json-patch" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) -func CreatePatchData(originalAttachedCluster, modifiedAttachedCluster interface{}) ([]byte, error) { - originalData, originalErr := json.Marshal(originalAttachedCluster) +func CreatePatchData(original, modified interface{}) ([]byte, error) { + originalData, originalErr := json.Marshal(original) if originalErr != nil { return nil, originalErr } - modifiedData, modifiedErr := json.Marshal(modifiedAttachedCluster) + modifiedData, modifiedErr := json.Marshal(modified) if modifiedErr != nil { return nil, modifiedErr } @@ -37,3 +38,33 @@ func CreatePatchData(originalAttachedCluster, modifiedAttachedCluster interface{ } return patchData, nil } + +func ModifiedObjectMeta(original, modified metav1.ObjectMeta) metav1.ObjectMeta { + if modified.Labels == nil { + modified.Labels = original.Labels + } else { + for k, v := range original.Labels { + if modified.Labels[k] == "" { + modified.Labels[k] = v + } + } + } + + if modified.Annotations == nil { + modified.Annotations = original.Annotations + } else { + for k, v := range original.Annotations { + if modified.Annotations[k] == "" { + modified.Annotations[k] = v + } + } + } + + if modified.Finalizers == nil { + modified.Finalizers = original.Finalizers + } + if modified.ResourceVersion == "" { + modified.ResourceVersion = original.ResourceVersion + } + return modified +}