@@ -5,10 +5,8 @@ import (
5
5
"encoding/json"
6
6
"errors"
7
7
"fmt"
8
- "regexp"
9
-
10
- "github.com/rs/zerolog/log"
11
8
"gopkg.in/yaml.v3"
9
+ "regexp"
12
10
13
11
"github.com/graphql-go/graphql"
14
12
"go.opentelemetry.io/otel"
@@ -25,7 +23,8 @@ import (
25
23
26
24
type Provider interface {
27
25
CrudProvider
28
- FieldResolverProvider
26
+ CommonResolver () graphql.FieldResolveFn
27
+ SanitizeGroupName (string ) string
29
28
}
30
29
31
30
type CrudProvider interface {
@@ -39,15 +38,10 @@ type CrudProvider interface {
39
38
SubscribeItems (gvk schema.GroupVersionKind ) graphql.FieldResolveFn
40
39
}
41
40
42
- type FieldResolverProvider interface {
43
- CommonResolver () graphql.FieldResolveFn
44
- SanitizeGroupName (string ) string
45
- GetOriginalGroupName (string ) string
46
- }
47
-
48
41
type Service struct {
49
- log * logger.Logger
50
- groupNames map [string ]string
42
+ log * logger.Logger
43
+ // groupNames stores relation between sanitized group names and original group names that are used in the Kubernetes API
44
+ groupNames map [string ]string // map[sanitizedGroupName]originalGroupName
51
45
runtimeClient client.WithWatch
52
46
}
53
47
@@ -65,7 +59,7 @@ func (r *Service) ListItems(gvk schema.GroupVersionKind) graphql.FieldResolveFn
65
59
ctx , span := otel .Tracer ("" ).Start (p .Context , "ListItems" , trace .WithAttributes (attribute .String ("kind" , gvk .Kind )))
66
60
defer span .End ()
67
61
68
- gvk .Group = r .GetOriginalGroupName (gvk .Group )
62
+ gvk .Group = r .getOriginalGroupName (gvk .Group )
69
63
70
64
log , err := r .log .ChildLoggerWithAttributes (
71
65
"operation" , "list" ,
@@ -119,7 +113,7 @@ func (r *Service) GetItem(gvk schema.GroupVersionKind) graphql.FieldResolveFn {
119
113
ctx , span := otel .Tracer ("" ).Start (p .Context , "GetItem" , trace .WithAttributes (attribute .String ("kind" , gvk .Kind )))
120
114
defer span .End ()
121
115
122
- gvk .Group = r .GetOriginalGroupName (gvk .Group )
116
+ gvk .Group = r .getOriginalGroupName (gvk .Group )
123
117
124
118
log , err := r .log .ChildLoggerWithAttributes (
125
119
"operation" , "get" ,
@@ -134,7 +128,7 @@ func (r *Service) GetItem(gvk schema.GroupVersionKind) graphql.FieldResolveFn {
134
128
}
135
129
136
130
// Retrieve required arguments
137
- name , namespace , err := getNameAndNamespace (p .Args )
131
+ name , namespace , err := getRequiredNameAndNamespaceArgs (p .Args )
138
132
if err != nil {
139
133
return nil , err
140
134
}
@@ -181,7 +175,7 @@ func (r *Service) CreateItem(gvk schema.GroupVersionKind) graphql.FieldResolveFn
181
175
ctx , span := otel .Tracer ("" ).Start (p .Context , "CreateItem" , trace .WithAttributes (attribute .String ("kind" , gvk .Kind )))
182
176
defer span .End ()
183
177
184
- gvk .Group = r .GetOriginalGroupName (gvk .Group )
178
+ gvk .Group = r .getOriginalGroupName (gvk .Group )
185
179
186
180
log := r .log .With ().Str ("operation" , "create" ).Str ("kind" , gvk .Kind ).Logger ()
187
181
@@ -212,11 +206,11 @@ func (r *Service) UpdateItem(gvk schema.GroupVersionKind) graphql.FieldResolveFn
212
206
ctx , span := otel .Tracer ("" ).Start (p .Context , "UpdateItem" , trace .WithAttributes (attribute .String ("kind" , gvk .Kind )))
213
207
defer span .End ()
214
208
215
- gvk .Group = r .GetOriginalGroupName (gvk .Group )
209
+ gvk .Group = r .getOriginalGroupName (gvk .Group )
216
210
217
211
log := r .log .With ().Str ("operation" , "update" ).Str ("kind" , gvk .Kind ).Logger ()
218
212
219
- name , namespace , err := getNameAndNamespace (p .Args )
213
+ name , namespace , err := getRequiredNameAndNamespaceArgs (p .Args )
220
214
if err != nil {
221
215
return nil , err
222
216
}
@@ -256,11 +250,11 @@ func (r *Service) DeleteItem(gvk schema.GroupVersionKind) graphql.FieldResolveFn
256
250
ctx , span := otel .Tracer ("" ).Start (p .Context , "DeleteItem" , trace .WithAttributes (attribute .String ("kind" , gvk .Kind )))
257
251
defer span .End ()
258
252
259
- gvk .Group = r .GetOriginalGroupName (gvk .Group )
253
+ gvk .Group = r .getOriginalGroupName (gvk .Group )
260
254
261
255
log := r .log .With ().Str ("operation" , "delete" ).Str ("kind" , gvk .Kind ).Logger ()
262
256
263
- name , namespace , err := getNameAndNamespace (p .Args )
257
+ name , namespace , err := getRequiredNameAndNamespaceArgs (p .Args )
264
258
if err != nil {
265
259
return nil , err
266
260
}
@@ -286,7 +280,7 @@ func (r *Service) CommonResolver() graphql.FieldResolveFn {
286
280
}
287
281
288
282
func (r * Service ) SanitizeGroupName (groupName string ) string {
289
- oldGroupName := groupName
283
+ originalGroupName := groupName
290
284
291
285
if groupName == "" {
292
286
groupName = "core"
@@ -298,53 +292,19 @@ func (r *Service) SanitizeGroupName(groupName string) string {
298
292
}
299
293
}
300
294
301
- r .groupNames [ groupName ] = oldGroupName
295
+ r .storeOriginalGroupName ( groupName , originalGroupName )
302
296
303
297
return groupName
304
298
}
305
299
306
- func (r * Service ) GetOriginalGroupName (groupName string ) string {
300
+ func (r * Service ) storeOriginalGroupName (groupName , originalName string ) {
301
+ r .groupNames [groupName ] = originalName
302
+ }
303
+
304
+ func (r * Service ) getOriginalGroupName (groupName string ) string {
307
305
if originalName , ok := r .groupNames [groupName ]; ok {
308
306
return originalName
309
307
}
310
308
311
309
return groupName
312
310
}
313
-
314
- func getNameAndNamespace (args map [string ]interface {}) (string , string , error ) {
315
- name , err := getStringArg (args , NameArg )
316
- if err != nil {
317
- return "" , "" , err
318
- }
319
-
320
- namespace , err := getStringArg (args , NamespaceArg )
321
- if err != nil {
322
- return "" , "" , err
323
- }
324
-
325
- return name , namespace , nil
326
- }
327
-
328
- func getStringArg (args map [string ]interface {}, key string ) (string , error ) {
329
- val , exists := args [key ]
330
- if ! exists {
331
- err := errors .New ("missing required argument: " + key )
332
- log .Error ().Err (err ).Msg (key + " argument is required" )
333
- return "" , err
334
- }
335
-
336
- str , ok := val .(string )
337
- if ! ok {
338
- err := errors .New ("invalid type for argument: " + key )
339
- log .Error ().Err (err ).Msg (key + " argument must be a string" )
340
- return "" , err
341
- }
342
-
343
- if str == "" {
344
- err := errors .New ("empty value for argument: " + key )
345
- log .Error ().Err (err ).Msg (key + " argument cannot be empty" )
346
- return "" , err
347
- }
348
-
349
- return str , nil
350
- }
0 commit comments