Skip to content

Commit 0a5fbac

Browse files
committed
Use GVK not GVKR
1 parent 9686768 commit 0a5fbac

9 files changed

+192
-224
lines changed

backend/admission.go

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,10 @@ func (o AdmissionRequestOperation) String() string {
3333
}
3434

3535
// Identify the Object properties
36-
// EG, the union of: metav1.GroupVersionKind and metav1.GroupVersionResource
37-
type GroupVersionKindResource struct {
38-
Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"`
39-
Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
40-
Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"`
41-
Resource string `protobuf:"bytes,4,opt,name=resource,proto3" json:"resource,omitempty"`
36+
type GroupVersionKind struct {
37+
Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"`
38+
Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
39+
Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"`
4240
}
4341

4442
// AdmissionRequest contains information from a kubernetes Admission request and decoded object(s).
@@ -51,7 +49,7 @@ type AdmissionRequest struct {
5149
// The requested operation
5250
Operation AdmissionRequestOperation `protobuf:"varint,2,opt,name=operation,proto3,enum=pluginv2.AdmissionRequestOperation" json:"operation,omitempty"`
5351
// The object kind
54-
Kind GroupVersionKindResource `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"`
52+
Kind GroupVersionKind `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"`
5553
// Object is the object in the request. This includes the full metadata envelope.
5654
ObjectBytes []byte `protobuf:"bytes,4,opt,name=object_bytes,json=objectBytes,proto3" json:"object_bytes,omitempty"`
5755
// OldObject is the object as it currently exists in storage. This includes the full metadata envelope.
@@ -63,7 +61,7 @@ type ConversionRequest struct {
6361
// NOTE: this may not include app or datasource instance settings depending on the request
6462
PluginContext PluginContext `protobuf:"bytes,1,opt,name=pluginContext,proto3" json:"pluginContext,omitempty"`
6563
// The object kind
66-
Kind GroupVersionKindResource `protobuf:"bytes,2,opt,name=kind,proto3" json:"kind,omitempty"`
64+
Kind GroupVersionKind `protobuf:"bytes,2,opt,name=kind,proto3" json:"kind,omitempty"`
6765
// Object is the object in the request. This includes the full metadata envelope.
6866
ObjectBytes []byte `protobuf:"bytes,3,opt,name=object_bytes,json=objectBytes,proto3" json:"object_bytes,omitempty"`
6967
// Target converted version

backend/admission_test.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@ func TestInstanceSettingsAdmissionConversions(t *testing.T) {
1919
"A": "B",
2020
},
2121
}
22-
req := before.ToAdmissionRequest(nil)
23-
after, err := backend.DataSourceInstanceSettingsFromProto(req.ObjectBytes, "")
22+
wire, err := before.ToProto()
23+
require.NoError(t, err)
24+
after, err := backend.DataSourceInstanceSettingsFromProto(wire, "")
2425
require.NoError(t, err)
2526
require.Equal(t, before.URL, after.URL)
2627
require.Equal(t, before.User, after.User)
@@ -36,8 +37,9 @@ func TestInstanceSettingsAdmissionConversions(t *testing.T) {
3637
"A": "B",
3738
},
3839
}
39-
req := before.ToAdmissionRequest(nil)
40-
after, err := backend.AppInstanceSettingsFromProto(req.ObjectBytes)
40+
wire, err := before.ToProto()
41+
require.NoError(t, err)
42+
after, err := backend.AppInstanceSettingsFromProto(wire)
4143
require.NoError(t, err)
4244
require.Equal(t, before.JSONData, after.JSONData)
4345
require.Equal(t, before.DecryptedSecureJSONData, after.DecryptedSecureJSONData)

backend/common.go

Lines changed: 12 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -58,26 +58,16 @@ func (s *AppInstanceSettings) HTTPClientOptions(_ context.Context) (httpclient.O
5858
return opts, nil
5959
}
6060

61-
func (s *AppInstanceSettings) GVKR() GroupVersionKindResource {
62-
return GroupVersionKindResource{
63-
Group: "grafana-plugins-sdk-go",
64-
Version: "v0", // the protobuf bytes (json is not valid)
61+
func (s *AppInstanceSettings) GVK() GroupVersionKind {
62+
return GroupVersionKind{
63+
Group: "grafana-plugin-sdk-go", // raw protobuf
64+
Version: s.APIVersion,
6565
Kind: "AppInstanceSettings",
6666
}
6767
}
6868

69-
func (s *AppInstanceSettings) ToAdmissionRequest(old *AppInstanceSettings) *AdmissionRequest {
70-
req := &AdmissionRequest{Kind: s.GVKR()}
71-
convert := ConvertToProtobuf{}
72-
obj := convert.AppInstanceSettings(s)
73-
oldObj := convert.AppInstanceSettings(old)
74-
if obj != nil {
75-
req.ObjectBytes, _ = proto.Marshal(obj)
76-
}
77-
if oldObj != nil {
78-
req.OldObjectBytes, _ = proto.Marshal(oldObj)
79-
}
80-
return req
69+
func (s *AppInstanceSettings) ToProto() ([]byte, error) {
70+
return proto.Marshal(ConvertToProtobuf{}.AppInstanceSettings(s))
8171
}
8272

8373
func AppInstanceSettingsFromProto(body []byte) (*AppInstanceSettings, error) {
@@ -181,26 +171,16 @@ func (s *DataSourceInstanceSettings) HTTPClientOptions(ctx context.Context) (htt
181171
return opts, nil
182172
}
183173

184-
func (s *DataSourceInstanceSettings) GVKR() GroupVersionKindResource {
185-
return GroupVersionKindResource{
186-
Group: "grafana-plugins-sdk-go",
187-
Version: "v0", // the protobuf bytes (json is not valid)
174+
func (s *DataSourceInstanceSettings) GVK() GroupVersionKind {
175+
return GroupVersionKind{
176+
Group: "grafana-plugin-sdk-go", // raw protobuf
177+
Version: s.APIVersion,
188178
Kind: "DataSourceInstanceSettings",
189179
}
190180
}
191181

192-
func (s *DataSourceInstanceSettings) ToAdmissionRequest(old *DataSourceInstanceSettings) *AdmissionRequest {
193-
req := &AdmissionRequest{Kind: s.GVKR()}
194-
convert := ConvertToProtobuf{}
195-
obj := convert.DataSourceInstanceSettings(s)
196-
oldObj := convert.DataSourceInstanceSettings(old)
197-
if obj != nil {
198-
req.ObjectBytes, _ = proto.Marshal(obj)
199-
}
200-
if oldObj != nil {
201-
req.OldObjectBytes, _ = proto.Marshal(oldObj)
202-
}
203-
return req
182+
func (s *DataSourceInstanceSettings) ToProto() ([]byte, error) {
183+
return proto.Marshal(ConvertToProtobuf{}.DataSourceInstanceSettings(s))
204184
}
205185

206186
func DataSourceInstanceSettingsFromProto(body []byte, pluginID string) (*DataSourceInstanceSettings, error) {

backend/convert_from_protobuf.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -310,13 +310,12 @@ func (f ConvertFromProtobuf) StatusResult(s *pluginv2.StatusResult) *StatusResul
310310
}
311311
}
312312

313-
// GroupVersionKindResource ...
314-
func (f ConvertFromProtobuf) GroupVersionKindResource(req *pluginv2.GroupVersionKindResource) GroupVersionKindResource {
315-
return GroupVersionKindResource{
316-
Group: req.Group,
317-
Version: req.Version,
318-
Kind: req.Kind,
319-
Resource: req.Resource,
313+
// GroupVersionKind ...
314+
func (f ConvertFromProtobuf) GroupVersionKind(req *pluginv2.GroupVersionKind) GroupVersionKind {
315+
return GroupVersionKind{
316+
Group: req.Group,
317+
Version: req.Version,
318+
Kind: req.Kind,
320319
}
321320
}
322321

@@ -325,7 +324,7 @@ func (f ConvertFromProtobuf) AdmissionRequest(req *pluginv2.AdmissionRequest) *A
325324
return &AdmissionRequest{
326325
PluginContext: f.PluginContext(req.PluginContext),
327326
Operation: AdmissionRequestOperation(req.Operation),
328-
Kind: f.GroupVersionKindResource(req.Kind),
327+
Kind: f.GroupVersionKind(req.Kind),
329328
ObjectBytes: req.ObjectBytes,
330329
OldObjectBytes: req.OldObjectBytes,
331330
}
@@ -335,7 +334,7 @@ func (f ConvertFromProtobuf) AdmissionRequest(req *pluginv2.AdmissionRequest) *A
335334
func (f ConvertFromProtobuf) ConversionRequest(req *pluginv2.ConversionRequest) *ConversionRequest {
336335
return &ConversionRequest{
337336
PluginContext: f.PluginContext(req.PluginContext),
338-
Kind: f.GroupVersionKindResource(req.Kind),
337+
Kind: f.GroupVersionKind(req.Kind),
339338
ObjectBytes: req.ObjectBytes,
340339
TargetVersion: req.TargetVersion,
341340
}

backend/convert_from_protobuf_test.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -538,11 +538,10 @@ func TestConvertFromProtobufAdmissionRequest(t *testing.T) {
538538
protoPIS := &pluginv2.AdmissionRequest{
539539
PluginContext: protoPluginContext,
540540
Operation: pluginv2.AdmissionRequest_CREATE,
541-
Kind: &pluginv2.GroupVersionKindResource{
542-
Group: "g",
543-
Version: "v",
544-
Kind: "k",
545-
Resource: "r",
541+
Kind: &pluginv2.GroupVersionKind{
542+
Group: "g",
543+
Version: "v",
544+
Kind: "k",
546545
},
547546
ObjectBytes: []byte(`{}`),
548547
}

backend/convert_to_protobuf.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -311,13 +311,12 @@ func (t ConvertToProtobuf) StatusResult(s *StatusResult) *pluginv2.StatusResult
311311
}
312312
}
313313

314-
// GroupVersionKindResource converts the SDK version of a GroupVersionKindResource to the protobuf version.
315-
func (t ConvertToProtobuf) GroupVersionKindResource(req *GroupVersionKindResource) *pluginv2.GroupVersionKindResource {
316-
return &pluginv2.GroupVersionKindResource{
317-
Group: req.Group,
318-
Version: req.Version,
319-
Kind: req.Kind,
320-
Resource: req.Resource,
314+
// GroupVersionKind converts the SDK version of a GroupVersionKind to the protobuf version.
315+
func (t ConvertToProtobuf) GroupVersionKind(req *GroupVersionKind) *pluginv2.GroupVersionKind {
316+
return &pluginv2.GroupVersionKind{
317+
Group: req.Group,
318+
Version: req.Version,
319+
Kind: req.Kind,
321320
}
322321
}
323322

@@ -326,7 +325,7 @@ func (t ConvertToProtobuf) AdmissionRequest(req *AdmissionRequest) *pluginv2.Adm
326325
return &pluginv2.AdmissionRequest{
327326
PluginContext: t.PluginContext(req.PluginContext),
328327
Operation: pluginv2.AdmissionRequest_Operation(req.Operation),
329-
Kind: t.GroupVersionKindResource(&req.Kind),
328+
Kind: t.GroupVersionKind(&req.Kind),
330329
ObjectBytes: req.ObjectBytes,
331330
OldObjectBytes: req.OldObjectBytes,
332331
}
@@ -336,7 +335,7 @@ func (t ConvertToProtobuf) AdmissionRequest(req *AdmissionRequest) *pluginv2.Adm
336335
func (t ConvertToProtobuf) ConversionRequest(req *ConversionRequest) *pluginv2.ConversionRequest {
337336
return &pluginv2.ConversionRequest{
338337
PluginContext: t.PluginContext(req.PluginContext),
339-
Kind: t.GroupVersionKindResource(&req.Kind),
338+
Kind: t.GroupVersionKind(&req.Kind),
340339
ObjectBytes: req.ObjectBytes,
341340
TargetVersion: req.TargetVersion,
342341
}

backend/serve.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,11 @@ func GracefulStandaloneServe(dsopts ServeOpts, info standalone.ServerSettings) e
198198
plugKeys = append(plugKeys, "stream")
199199
}
200200

201+
if pluginOpts.AdmissionServer != nil {
202+
pluginv2.RegisterAdmissionControlServer(server, pluginOpts.AdmissionServer)
203+
plugKeys = append(plugKeys, "admission")
204+
}
205+
201206
// Start the GRPC server and handle graceful shutdown to ensure we execute deferred functions correctly
202207
log.DefaultLogger.Debug("Standalone plugin server", "capabilities", plugKeys)
203208
listener, err := net.Listen("tcp", info.Address)

0 commit comments

Comments
 (0)