From b74c08ec5cec3f07b8423340f24e643ad576c2c7 Mon Sep 17 00:00:00 2001 From: Peter Jiang <35584807+pjiang-dev@users.noreply.github.com> Date: Mon, 20 Apr 2026 10:27:41 -0700 Subject: [PATCH] fix: remove resourceVersion from ssd (#27406) Signed-off-by: Peter Jiang --- gitops-engine/pkg/diff/diff.go | 2 ++ gitops-engine/pkg/diff/diff_test.go | 48 +++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/gitops-engine/pkg/diff/diff.go b/gitops-engine/pkg/diff/diff.go index 244f78010e..e4fdbaa033 100644 --- a/gitops-engine/pkg/diff/diff.go +++ b/gitops-engine/pkg/diff/diff.go @@ -188,6 +188,7 @@ func serverSideDiff(config, live *unstructured.Unstructured, opts ...Option) (*D Normalize(predictedLive, opts...) unstructured.RemoveNestedField(predictedLive.Object, "metadata", "managedFields") + unstructured.RemoveNestedField(predictedLive.Object, "metadata", "resourceVersion") predictedLiveBytes, err := json.Marshal(predictedLive) if err != nil { @@ -196,6 +197,7 @@ func serverSideDiff(config, live *unstructured.Unstructured, opts ...Option) (*D Normalize(live, opts...) unstructured.RemoveNestedField(live.Object, "metadata", "managedFields") + unstructured.RemoveNestedField(live.Object, "metadata", "resourceVersion") liveBytes, err := json.Marshal(live) if err != nil { return nil, fmt.Errorf("error marshaling live resource %s/%s: %w", config.GetKind(), config.GetName(), err) diff --git a/gitops-engine/pkg/diff/diff_test.go b/gitops-engine/pkg/diff/diff_test.go index 514d60e0d5..d4f2243aca 100644 --- a/gitops-engine/pkg/diff/diff_test.go +++ b/gitops-engine/pkg/diff/diff_test.go @@ -1165,6 +1165,54 @@ func TestServerSideDiff(t *testing.T) { assert.Empty(t, liveDeploy.Annotations[AnnotationLastAppliedConfig]) }) + t.Run("will not report diff for mismatched resourceVersion", func(t *testing.T) { + // given + t.Parallel() + predictedLiveJSON := `{ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "my-deploy", + "namespace": "default", + "resourceVersion": "99999", + "managedFields": [{"manager":"argocd-controller","operation":"Apply","fieldsType":"FieldsV1","fieldsV1":{"f:spec":{"f:replicas":{}}}}] + }, + "spec": {"replicas": 1} + }` + liveState := StrToUnstructured(`{ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "my-deploy", + "namespace": "default", + "resourceVersion": "12345", + "managedFields": [{"manager":"argocd-controller","operation":"Apply","fieldsType":"FieldsV1","fieldsV1":{"f:spec":{"f:replicas":{}}}}] + }, + "spec": {"replicas": 1} + }`) + desiredState := StrToUnstructured(`{ + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "my-deploy", + "namespace": "default" + }, + "spec": {"replicas": 1} + }`) + opts := buildOpts(predictedLiveJSON) + opts = append(opts, WithIgnoreMutationWebhook(false)) + + // when + result, err := serverSideDiff(desiredState, liveState, opts...) + + // then + require.NoError(t, err) + assert.NotNil(t, result) + assert.False(t, result.Modified, "mismatched resourceVersion should not cause a diff") + assert.NotContains(t, string(result.PredictedLive), "resourceVersion") + assert.NotContains(t, string(result.NormalizedLive), "resourceVersion") + }) + t.Run("will detect ConfigMap data key removal", func(t *testing.T) { // given t.Parallel()