Skip to content

Commit

Permalink
use jsonpointer syntax
Browse files Browse the repository at this point in the history
Signed-off-by: Patrick <[email protected]>
  • Loading branch information
Patrick0308 committed Aug 13, 2024
1 parent 89a9c78 commit 2ab8aed
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 15 deletions.
29 changes: 18 additions & 11 deletions pkg/util/overridemanager/overridemanager.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ package overridemanager
import (
"context"
"encoding/json"
"errors"
"reflect"
"sort"

jsonpatch "github.com/evanphx/json-patch/v5"
"github.com/tidwall/gjson"
"github.com/tidwall/sjson"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
yamlutil "k8s.io/apimachinery/pkg/util/yaml"
Expand All @@ -32,6 +32,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/yaml"

"github.com/go-openapi/jsonpointer"
clusterv1alpha1 "github.com/karmada-io/karmada/pkg/apis/cluster/v1alpha1"
policyv1alpha1 "github.com/karmada-io/karmada/pkg/apis/policy/v1alpha1"
"github.com/karmada-io/karmada/pkg/events"
Expand Down Expand Up @@ -290,7 +291,6 @@ func applyRawJSONPatch(raw []byte, overrides []overrideOption) ([]byte, error) {
if err != nil {
return nil, err
}
// fmt.Printf(string(jsonPatchBytes) + " " + string(raw))

patch, err := jsonpatch.DecodePatch(jsonPatchBytes)
if err != nil {
Expand Down Expand Up @@ -379,13 +379,19 @@ func applyPlaintextObjectOverriders(rawObj *unstructured.Unstructured, plaintext
if len(plaintextObjectOverriders) == 0 {
return nil
}
rawObjJSONBytes, err := rawObj.MarshalJSON()
if err != nil {
return err
}
for index := range plaintextObjectOverriders {
res := gjson.GetBytes(rawObjJSONBytes, plaintextObjectOverriders[index].Path)
dataBytes := []byte(res.String())
pointer, err := jsonpointer.New(plaintextObjectOverriders[index].Path)
if err != nil {
return err
}
res, kind, err := pointer.Get(rawObj.Object)
if err != nil {
return err
}
if kind != reflect.String {
return errors.New("path's value should be string")
}
dataBytes := []byte(res.(string))
isJSON := yamlutil.IsJSONBuffer(dataBytes)
if !isJSON {
dataBytes, err = yaml.YAMLToJSON(dataBytes)
Expand All @@ -403,12 +409,13 @@ func applyPlaintextObjectOverriders(rawObj *unstructured.Unstructured, plaintext
return err
}
}
rawObjJSONBytes, err = sjson.SetBytes(rawObjJSONBytes, plaintextObjectOverriders[index].Path, appliedRawData)

_, err = pointer.Set(rawObj.Object, string(appliedRawData))
if err != nil {
return err
}
}
return rawObj.UnmarshalJSON(rawObjJSONBytes)
return nil
}

func parseJSONPatchesByPlaintext(overriders []policyv1alpha1.PlaintextOverrider) []overrideOption {
Expand Down
8 changes: 4 additions & 4 deletions pkg/util/overridemanager/overridemanager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -489,7 +489,7 @@ key:
Overriders: policyv1alpha1.Overriders{
PlaintextObjectOverrider: []policyv1alpha1.PlaintextObjectOverrider{
{
Path: "data.test\\.yaml",
Path: "/data/test.yaml",
Plaintext: []policyv1alpha1.PlaintextOverrider{
{
Path: "/key/key1",
Expand Down Expand Up @@ -519,7 +519,7 @@ key:
Overriders: policyv1alpha1.Overriders{
PlaintextObjectOverrider: []policyv1alpha1.PlaintextObjectOverrider{
{
Path: "data.test\\.yaml",
Path: "/data/test.yaml",
Plaintext: []policyv1alpha1.PlaintextOverrider{
{
Path: "/key/key1",
Expand Down Expand Up @@ -608,7 +608,7 @@ func Test_overrideManagerImpl_ApplyJSONOverridePolicies(t *testing.T) {
Overriders: policyv1alpha1.Overriders{
PlaintextObjectOverrider: []policyv1alpha1.PlaintextObjectOverrider{
{
Path: "data.test\\.json",
Path: "/data/test.json",
Plaintext: []policyv1alpha1.PlaintextOverrider{
{
Path: "/key/key1",
Expand Down Expand Up @@ -638,7 +638,7 @@ func Test_overrideManagerImpl_ApplyJSONOverridePolicies(t *testing.T) {
Overriders: policyv1alpha1.Overriders{
PlaintextObjectOverrider: []policyv1alpha1.PlaintextObjectOverrider{
{
Path: "data.test\\.json",
Path: "/data/test.json",
Plaintext: []policyv1alpha1.PlaintextOverrider{
{
Path: "/key/key1",
Expand Down

0 comments on commit 2ab8aed

Please sign in to comment.