Skip to content

Commit 8c15a76

Browse files
authored
fix(api): ssar resource kind name and resource updates (#9599)
* fix: ssar resource kind name invalid * fix resource update
1 parent e5cd861 commit 8c15a76

File tree

12 files changed

+60
-23
lines changed

12 files changed

+60
-23
lines changed

hack/docker/dev.compose.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ services:
5454
command:
5555
--kubeconfig=${KUBECONFIG:?}
5656
--sidecar-host=${SIDECAR_HOST:?}
57+
--v=4
5758
volumes:
5859
- ${PWD}/modules/common:/workspace/common # Required - Common dir watched by AIR
5960
- ${PWD}/modules/api/pkg:/workspace/api/pkg # Required - Source dir watched by AIR

modules/api/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ require (
3838
github.com/cloudwego/base64x v0.1.4 // indirect
3939
github.com/cloudwego/iasm v0.2.0 // indirect
4040
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
41+
github.com/evanphx/json-patch/v5 v5.9.0 // indirect
4142
github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect
4243
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
4344
github.com/gabriel-vasile/mimetype v1.4.3 // indirect

modules/api/go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ github.com/emicklei/go-restful/v3 v3.12.1 h1:PJMDIM/ak7btuL8Ex0iYET9hxM3CI2sjZtz
4646
github.com/emicklei/go-restful/v3 v3.12.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
4747
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
4848
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
49+
github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg=
50+
github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ=
4951
github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM=
5052
github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4=
5153
github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=

modules/auth/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ require (
2323
github.com/cloudwego/iasm v0.2.0 // indirect
2424
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
2525
github.com/emicklei/go-restful/v3 v3.12.1 // indirect
26+
github.com/evanphx/json-patch/v5 v5.9.0 // indirect
2627
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
2728
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
2829
github.com/gammazero/deque v0.2.1 // indirect
@@ -67,7 +68,6 @@ require (
6768
golang.org/x/text v0.18.0 // indirect
6869
golang.org/x/time v0.3.0 // indirect
6970
google.golang.org/protobuf v1.34.2 // indirect
70-
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
7171
gopkg.in/inf.v0 v0.9.1 // indirect
7272
gopkg.in/yaml.v2 v2.4.0 // indirect
7373
gopkg.in/yaml.v3 v3.0.1 // indirect

modules/auth/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1
1717
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1818
github.com/emicklei/go-restful/v3 v3.12.1 h1:PJMDIM/ak7btuL8Ex0iYET9hxM3CI2sjZtzpL63nKAU=
1919
github.com/emicklei/go-restful/v3 v3.12.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
20+
github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg=
21+
github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ=
2022
github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
2123
github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
2224
github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
@@ -194,8 +196,6 @@ google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWn
194196
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
195197
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
196198
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
197-
gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
198-
gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
199199
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
200200
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
201201
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

modules/common/client/cache/client/common/resourcelister_options.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
package common
1616

1717
import (
18+
"strings"
19+
20+
"github.com/gobuffalo/flect"
21+
1822
"k8s.io/dashboard/types"
1923
)
2024

@@ -28,7 +32,7 @@ func WithNamespace[T any](namespace string) Option[T] {
2832

2933
func WithResourceKind[T any](kind types.ResourceKind) Option[T] {
3034
return func(lister *CachedResourceLister[T]) {
31-
lister.ssar.Spec.ResourceAttributes.Resource = kind.String()
35+
lister.ssar.Spec.ResourceAttributes.Resource = flect.Pluralize(strings.ToLower(kind.String()))
3236
}
3337
}
3438

modules/common/client/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ go 1.23.0
44

55
require (
66
github.com/Yiling-J/theine-go v0.5.0
7+
github.com/evanphx/json-patch/v5 v5.9.0
78
github.com/gobuffalo/flect v1.0.3
89
github.com/spf13/pflag v1.0.5
910
k8s.io/api v0.31.1
@@ -50,7 +51,6 @@ require (
5051
golang.org/x/text v0.18.0 // indirect
5152
golang.org/x/time v0.3.0 // indirect
5253
google.golang.org/protobuf v1.34.2 // indirect
53-
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
5454
gopkg.in/inf.v0 v0.9.1 // indirect
5555
gopkg.in/yaml.v2 v2.4.0 // indirect
5656
gopkg.in/yaml.v3 v3.0.1 // indirect

modules/common/client/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1
99
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1010
github.com/emicklei/go-restful/v3 v3.12.1 h1:PJMDIM/ak7btuL8Ex0iYET9hxM3CI2sjZtzpL63nKAU=
1111
github.com/emicklei/go-restful/v3 v3.12.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
12+
github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg=
13+
github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ=
1214
github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
1315
github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
1416
github.com/gammazero/deque v0.2.1 h1:qSdsbG6pgp6nL7A0+K/B7s12mcCY/5l5SIUpMOl+dC0=
@@ -146,8 +148,6 @@ google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWn
146148
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
147149
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
148150
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
149-
gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
150-
gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
151151
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
152152
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
153153
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

modules/common/client/verber.go

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,20 @@ import (
1818
"context"
1919
"fmt"
2020
"net/http"
21+
"reflect"
2122
"strings"
2223

24+
jsonpatch "github.com/evanphx/json-patch/v5"
2325
"github.com/gobuffalo/flect"
2426
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2527
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
2628
"k8s.io/apimachinery/pkg/runtime"
2729
"k8s.io/apimachinery/pkg/runtime/schema"
2830
k8stypes "k8s.io/apimachinery/pkg/types"
29-
"k8s.io/apimachinery/pkg/util/jsonmergepatch"
31+
"k8s.io/apimachinery/pkg/util/strategicpatch"
3032
"k8s.io/client-go/discovery"
3133
"k8s.io/client-go/dynamic"
34+
"k8s.io/client-go/kubernetes/scheme"
3235
"k8s.io/client-go/util/retry"
3336
"k8s.io/klog/v2"
3437
)
@@ -169,14 +172,39 @@ func (v *resourceVerber) Update(object *unstructured.Unstructured) error {
169172
return fmt.Errorf("failed to marshal modified data: %w", err)
170173
}
171174

172-
patchBytes, err := jsonmergepatch.CreateThreeWayJSONMergePatch(origData, modifiedData, origData)
173-
if err != nil {
174-
return fmt.Errorf("failed creating merge patch: %w", err)
175+
if reflect.DeepEqual(result, object) {
176+
klog.V(3).InfoS("original and updated objects are the same, skipping")
177+
return nil
175178
}
176179

177-
klog.V(2).InfoS("patching resource", "group", gvr.Group, "version", gvr.Version, "resource", gvr.Resource, "name", name, "namespace", namespace, "patch", string(patchBytes))
178-
_, updateErr := v.client.Resource(gvr).Namespace(namespace).Patch(context.TODO(), name, k8stypes.MergePatchType, patchBytes, metav1.PatchOptions{})
179-
return updateErr
180+
versionedObject, err := scheme.Scheme.New(schema.GroupVersionKind{
181+
Group: gvr.Group,
182+
Version: gvr.Version,
183+
Kind: object.GetKind(),
184+
})
185+
186+
switch {
187+
case runtime.IsNotRegisteredError(err):
188+
patchBytes, err := jsonpatch.CreateMergePatch(origData, modifiedData)
189+
if err != nil {
190+
return fmt.Errorf("failed creating merge patch: %w", err)
191+
}
192+
193+
klog.V(2).InfoS("patching resource", "group", gvr.Group, "version", gvr.Version, "resource", gvr.Resource, "name", name, "namespace", namespace, "patch", string(patchBytes))
194+
_, updateErr := v.client.Resource(gvr).Namespace(namespace).Patch(context.TODO(), name, k8stypes.MergePatchType, patchBytes, metav1.PatchOptions{})
195+
return updateErr
196+
case err != nil:
197+
return err
198+
default:
199+
patchBytes, err := strategicpatch.CreateTwoWayMergePatch(origData, modifiedData, versionedObject)
200+
if err != nil {
201+
return fmt.Errorf("failed creating two way merge patch: %w", err)
202+
}
203+
204+
klog.V(2).InfoS("patching resource", "group", gvr.Group, "version", gvr.Version, "resource", gvr.Resource, "name", name, "namespace", namespace, "patch", string(patchBytes))
205+
_, updateErr := v.client.Resource(gvr).Namespace(namespace).Patch(context.TODO(), name, k8stypes.StrategicMergePatchType, patchBytes, metav1.PatchOptions{})
206+
return updateErr
207+
}
180208
})
181209
}
182210

modules/web/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ require (
2727
github.com/cloudwego/iasm v0.2.0 // indirect
2828
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
2929
github.com/emicklei/go-restful/v3 v3.12.1 // indirect
30+
github.com/evanphx/json-patch/v5 v5.9.0 // indirect
3031
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
3132
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
3233
github.com/gammazero/deque v0.2.1 // indirect
@@ -70,7 +71,6 @@ require (
7071
golang.org/x/term v0.23.0 // indirect
7172
golang.org/x/time v0.3.0 // indirect
7273
google.golang.org/protobuf v1.34.2 // indirect
73-
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
7474
gopkg.in/inf.v0 v0.9.1 // indirect
7575
gopkg.in/yaml.v2 v2.4.0 // indirect
7676
gopkg.in/yaml.v3 v3.0.1 // indirect

0 commit comments

Comments
 (0)