diff --git a/internal/controllers/topology/cluster/structuredmerge/dryrun.go b/internal/controllers/topology/cluster/structuredmerge/dryrun.go index eb3ea0449e81..20b02b659180 100644 --- a/internal/controllers/topology/cluster/structuredmerge/dryrun.go +++ b/internal/controllers/topology/cluster/structuredmerge/dryrun.go @@ -175,9 +175,12 @@ func dryRunSSAPatch(ctx context.Context, dryRunCtx *dryRunSSAPatchInput) (bool, ShouldFilter: ssa.IsPathIgnored([]contract.Path{[]string{"metadata", "managedFields"}}), }) - changes, err = json.Marshal(diff.Object) - if err != nil { - return false, false, nil, errors.Wrapf(err, "failed to marshal diff") + // changes should be empty (not "{}") if diff.Object is empty + if len(diff.Object) != 0 { + changes, err = json.Marshal(diff.Object) + if err != nil { + return false, false, nil, errors.Wrapf(err, "failed to marshal diff") + } } } diff --git a/internal/controllers/topology/cluster/structuredmerge/serversidepathhelper_test.go b/internal/controllers/topology/cluster/structuredmerge/serversidepathhelper_test.go index e962c4da38ee..a183dea774ef 100644 --- a/internal/controllers/topology/cluster/structuredmerge/serversidepathhelper_test.go +++ b/internal/controllers/topology/cluster/structuredmerge/serversidepathhelper_test.go @@ -388,7 +388,7 @@ func TestServerSideApply(t *testing.T) { g.Expect(err).ToNot(HaveOccurred()) g.Expect(p0.HasChanges()).To(BeTrue()) g.Expect(p0.HasSpecChanges()).To(BeFalse()) - g.Expect(p0.Changes()).To(Equal([]byte(`{}`))) // Note: metadata.managedFields have been removed from the diff to reduce log verbosity. + g.Expect(p0.Changes()).To(BeEmpty()) // Note: metadata.managedFields have been removed from the diff to reduce log verbosity. // Create the object using server side apply g.Expect(p0.Patch(ctx)).To(Succeed())