Skip to content

Commit 2ab8aed

Browse files
committed
use jsonpointer syntax
Signed-off-by: Patrick <[email protected]>
1 parent 89a9c78 commit 2ab8aed

File tree

2 files changed

+22
-15
lines changed

2 files changed

+22
-15
lines changed

Diff for: pkg/util/overridemanager/overridemanager.go

+18-11
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ package overridemanager
1919
import (
2020
"context"
2121
"encoding/json"
22+
"errors"
23+
"reflect"
2224
"sort"
2325

2426
jsonpatch "github.com/evanphx/json-patch/v5"
25-
"github.com/tidwall/gjson"
26-
"github.com/tidwall/sjson"
2727
corev1 "k8s.io/api/core/v1"
2828
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
2929
yamlutil "k8s.io/apimachinery/pkg/util/yaml"
@@ -32,6 +32,7 @@ import (
3232
"sigs.k8s.io/controller-runtime/pkg/client"
3333
"sigs.k8s.io/yaml"
3434

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

295295
patch, err := jsonpatch.DecodePatch(jsonPatchBytes)
296296
if err != nil {
@@ -379,13 +379,19 @@ func applyPlaintextObjectOverriders(rawObj *unstructured.Unstructured, plaintext
379379
if len(plaintextObjectOverriders) == 0 {
380380
return nil
381381
}
382-
rawObjJSONBytes, err := rawObj.MarshalJSON()
383-
if err != nil {
384-
return err
385-
}
386382
for index := range plaintextObjectOverriders {
387-
res := gjson.GetBytes(rawObjJSONBytes, plaintextObjectOverriders[index].Path)
388-
dataBytes := []byte(res.String())
383+
pointer, err := jsonpointer.New(plaintextObjectOverriders[index].Path)
384+
if err != nil {
385+
return err
386+
}
387+
res, kind, err := pointer.Get(rawObj.Object)
388+
if err != nil {
389+
return err
390+
}
391+
if kind != reflect.String {
392+
return errors.New("path's value should be string")
393+
}
394+
dataBytes := []byte(res.(string))
389395
isJSON := yamlutil.IsJSONBuffer(dataBytes)
390396
if !isJSON {
391397
dataBytes, err = yaml.YAMLToJSON(dataBytes)
@@ -403,12 +409,13 @@ func applyPlaintextObjectOverriders(rawObj *unstructured.Unstructured, plaintext
403409
return err
404410
}
405411
}
406-
rawObjJSONBytes, err = sjson.SetBytes(rawObjJSONBytes, plaintextObjectOverriders[index].Path, appliedRawData)
412+
413+
_, err = pointer.Set(rawObj.Object, string(appliedRawData))
407414
if err != nil {
408415
return err
409416
}
410417
}
411-
return rawObj.UnmarshalJSON(rawObjJSONBytes)
418+
return nil
412419
}
413420

414421
func parseJSONPatchesByPlaintext(overriders []policyv1alpha1.PlaintextOverrider) []overrideOption {

Diff for: pkg/util/overridemanager/overridemanager_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -489,7 +489,7 @@ key:
489489
Overriders: policyv1alpha1.Overriders{
490490
PlaintextObjectOverrider: []policyv1alpha1.PlaintextObjectOverrider{
491491
{
492-
Path: "data.test\\.yaml",
492+
Path: "/data/test.yaml",
493493
Plaintext: []policyv1alpha1.PlaintextOverrider{
494494
{
495495
Path: "/key/key1",
@@ -519,7 +519,7 @@ key:
519519
Overriders: policyv1alpha1.Overriders{
520520
PlaintextObjectOverrider: []policyv1alpha1.PlaintextObjectOverrider{
521521
{
522-
Path: "data.test\\.yaml",
522+
Path: "/data/test.yaml",
523523
Plaintext: []policyv1alpha1.PlaintextOverrider{
524524
{
525525
Path: "/key/key1",
@@ -608,7 +608,7 @@ func Test_overrideManagerImpl_ApplyJSONOverridePolicies(t *testing.T) {
608608
Overriders: policyv1alpha1.Overriders{
609609
PlaintextObjectOverrider: []policyv1alpha1.PlaintextObjectOverrider{
610610
{
611-
Path: "data.test\\.json",
611+
Path: "/data/test.json",
612612
Plaintext: []policyv1alpha1.PlaintextOverrider{
613613
{
614614
Path: "/key/key1",
@@ -638,7 +638,7 @@ func Test_overrideManagerImpl_ApplyJSONOverridePolicies(t *testing.T) {
638638
Overriders: policyv1alpha1.Overriders{
639639
PlaintextObjectOverrider: []policyv1alpha1.PlaintextObjectOverrider{
640640
{
641-
Path: "data.test\\.json",
641+
Path: "/data/test.json",
642642
Plaintext: []policyv1alpha1.PlaintextOverrider{
643643
{
644644
Path: "/key/key1",

0 commit comments

Comments
 (0)