From 29d1794ce0aa8e9d45c944c8a399b387dfccdcad Mon Sep 17 00:00:00 2001 From: Lukasz Szaszkiewicz Date: Tue, 10 Dec 2024 10:49:24 +0100 Subject: [PATCH] manifestclient: format jsonpatch payloads --- pkg/manifestclient/write_roundtripper.go | 12 ++++++++++++ pkg/manifestclienttest/client_write_test.go | 7 ++++--- .../featuregates/943a-body-instance-name.yaml | 5 +++++ ...ce-name.yaml => 943a-metadata-instance-name.yaml} | 0 .../featuregates/bd0d-body-instance-name.yaml | 1 - .../featuregates/943a-body-instance-name.yaml | 5 +++++ ...ce-name.yaml => 943a-metadata-instance-name.yaml} | 0 .../featuregates/bd0d-body-instance-name.yaml | 1 - 8 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/Patch/cluster-scoped-resources/config.openshift.io/featuregates/943a-body-instance-name.yaml rename pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/Patch/cluster-scoped-resources/config.openshift.io/featuregates/{bd0d-metadata-instance-name.yaml => 943a-metadata-instance-name.yaml} (100%) delete mode 100644 pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/Patch/cluster-scoped-resources/config.openshift.io/featuregates/bd0d-body-instance-name.yaml create mode 100644 pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/PatchStatus/cluster-scoped-resources/config.openshift.io/featuregates/943a-body-instance-name.yaml rename pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/PatchStatus/cluster-scoped-resources/config.openshift.io/featuregates/{bd0d-metadata-instance-name.yaml => 943a-metadata-instance-name.yaml} (100%) delete mode 100644 pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/PatchStatus/cluster-scoped-resources/config.openshift.io/featuregates/bd0d-body-instance-name.yaml diff --git a/pkg/manifestclient/write_roundtripper.go b/pkg/manifestclient/write_roundtripper.go index d85d78dd48..bb134ed613 100644 --- a/pkg/manifestclient/write_roundtripper.go +++ b/pkg/manifestclient/write_roundtripper.go @@ -175,6 +175,18 @@ func (mrt *writeTrackingRoundTripper) roundTrip(req *http.Request) ([]byte, erro } generatedName = bodyObj.(*unstructured.Unstructured).GetGenerateName() kindType = bodyObj.GetObjectKind().GroupVersionKind() + } else if (action == ActionPatch || action == ActionPatchStatus) && patchType == string(types.JSONPatchType) { + // the following code gives nice formatting for + // JSON patches that will be stored in files. + var jsonPatchOperations []map[string]interface{} + err = json.Unmarshal(bodyOutputBytes, &jsonPatchOperations) + if err != nil { + return nil, fmt.Errorf("unable to decode JSONPatch body: %w", err) + } + bodyOutputBytes, err = yaml.Marshal(jsonPatchOperations) + if err != nil { + return nil, fmt.Errorf("unable to encode JSONPatch body: %w", err) + } } fieldManagerName := "" diff --git a/pkg/manifestclienttest/client_write_test.go b/pkg/manifestclienttest/client_write_test.go index cb59a8a7fc..0aec83cde5 100644 --- a/pkg/manifestclienttest/client_write_test.go +++ b/pkg/manifestclienttest/client_write_test.go @@ -171,12 +171,13 @@ func TestSimpleWritesChecks(t *testing.T) { } ctx := manifestclient.WithControllerInstanceNameFromContext(context.TODO(), "fooController") + jsonPatchPayload := []byte(`[{"op":"test","path":"/foo/path","value":"bar"},{"op":"remove","path":"/foo/path/2"}]`) resultingObj, err := configClient.ConfigV1().FeatureGates().Patch( ctx, "instance-name", types.JSONPatchType, - []byte("json-patch"), + jsonPatchPayload, metav1.PatchOptions{}) if err != nil { t.Fatal(err) @@ -189,7 +190,7 @@ func TestSimpleWritesChecks(t *testing.T) { ctx, "instance-name", types.JSONPatchType, - []byte("json-patch"), + jsonPatchPayload, metav1.PatchOptions{}, "status") if err != nil { @@ -210,7 +211,7 @@ func TestSimpleWritesChecks(t *testing.T) { ctx, "instance-name", types.JSONPatchType, - []byte("json-patch"), + jsonPatchPayload, metav1.PatchOptions{}, ) if err != nil { diff --git a/pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/Patch/cluster-scoped-resources/config.openshift.io/featuregates/943a-body-instance-name.yaml b/pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/Patch/cluster-scoped-resources/config.openshift.io/featuregates/943a-body-instance-name.yaml new file mode 100644 index 0000000000..9d5d66b24b --- /dev/null +++ b/pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/Patch/cluster-scoped-resources/config.openshift.io/featuregates/943a-body-instance-name.yaml @@ -0,0 +1,5 @@ +- op: test + path: /foo/path + value: bar +- op: remove + path: /foo/path/2 diff --git a/pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/Patch/cluster-scoped-resources/config.openshift.io/featuregates/bd0d-metadata-instance-name.yaml b/pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/Patch/cluster-scoped-resources/config.openshift.io/featuregates/943a-metadata-instance-name.yaml similarity index 100% rename from pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/Patch/cluster-scoped-resources/config.openshift.io/featuregates/bd0d-metadata-instance-name.yaml rename to pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/Patch/cluster-scoped-resources/config.openshift.io/featuregates/943a-metadata-instance-name.yaml diff --git a/pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/Patch/cluster-scoped-resources/config.openshift.io/featuregates/bd0d-body-instance-name.yaml b/pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/Patch/cluster-scoped-resources/config.openshift.io/featuregates/bd0d-body-instance-name.yaml deleted file mode 100644 index a500ef8f6c..0000000000 --- a/pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/Patch/cluster-scoped-resources/config.openshift.io/featuregates/bd0d-body-instance-name.yaml +++ /dev/null @@ -1 +0,0 @@ -json-patch \ No newline at end of file diff --git a/pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/PatchStatus/cluster-scoped-resources/config.openshift.io/featuregates/943a-body-instance-name.yaml b/pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/PatchStatus/cluster-scoped-resources/config.openshift.io/featuregates/943a-body-instance-name.yaml new file mode 100644 index 0000000000..9d5d66b24b --- /dev/null +++ b/pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/PatchStatus/cluster-scoped-resources/config.openshift.io/featuregates/943a-body-instance-name.yaml @@ -0,0 +1,5 @@ +- op: test + path: /foo/path + value: bar +- op: remove + path: /foo/path/2 diff --git a/pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/PatchStatus/cluster-scoped-resources/config.openshift.io/featuregates/bd0d-metadata-instance-name.yaml b/pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/PatchStatus/cluster-scoped-resources/config.openshift.io/featuregates/943a-metadata-instance-name.yaml similarity index 100% rename from pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/PatchStatus/cluster-scoped-resources/config.openshift.io/featuregates/bd0d-metadata-instance-name.yaml rename to pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/PatchStatus/cluster-scoped-resources/config.openshift.io/featuregates/943a-metadata-instance-name.yaml diff --git a/pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/PatchStatus/cluster-scoped-resources/config.openshift.io/featuregates/bd0d-body-instance-name.yaml b/pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/PatchStatus/cluster-scoped-resources/config.openshift.io/featuregates/bd0d-body-instance-name.yaml deleted file mode 100644 index a500ef8f6c..0000000000 --- a/pkg/manifestclienttest/testdata/mutation-tests/PATCH-crd-in-dataset/PatchStatus/cluster-scoped-resources/config.openshift.io/featuregates/bd0d-body-instance-name.yaml +++ /dev/null @@ -1 +0,0 @@ -json-patch \ No newline at end of file