@@ -10,7 +10,6 @@ import (
10
10
"strings"
11
11
12
12
"github.com/graphql-go/graphql"
13
- pkgErrors "github.com/pkg/errors"
14
13
"go.opentelemetry.io/otel"
15
14
"go.opentelemetry.io/otel/attribute"
16
15
"go.opentelemetry.io/otel/trace"
@@ -31,7 +30,7 @@ type Provider interface {
31
30
CommonResolver () graphql.FieldResolveFn
32
31
SanitizeGroupName (string ) string
33
32
RuntimeClient () client.WithWatch
34
- RelationResolver (fieldName string ) graphql.FieldResolveFn
33
+ RelationResolver (fieldName string , gvk schema. GroupVersionKind ) graphql.FieldResolveFn
35
34
}
36
35
37
36
type CrudProvider interface {
@@ -90,21 +89,11 @@ func (r *Service) ListItems(gvk schema.GroupVersionKind, scope v1.ResourceScope)
90
89
log = r .log
91
90
}
92
91
93
- // Create an unstructured list to hold the results
92
+ // Create a list of unstructured objects to hold the results
94
93
list := & unstructured.UnstructuredList {}
95
- list .SetGroupVersionKind (gvk )
94
+ list .SetGroupVersionKind (schema. GroupVersionKind { Group : gvk . Group , Version : gvk . Version , Kind : gvk . Kind + "List" } )
96
95
97
96
var opts []client.ListOption
98
- // Handle label selector argument
99
- if labelSelector , ok := p .Args [LabelSelectorArg ].(string ); ok && labelSelector != "" {
100
- selector , err := labels .Parse (labelSelector )
101
- if err != nil {
102
- log .Error ().Err (err ).Str (LabelSelectorArg , labelSelector ).Msg ("Unable to parse given label selector" )
103
- return nil , err
104
- }
105
- opts = append (opts , client.MatchingLabelsSelector {Selector : selector })
106
- }
107
-
108
97
if isResourceNamespaceScoped (scope ) {
109
98
namespace , err := getStringArg (p .Args , NamespaceArg , false )
110
99
if err != nil {
@@ -115,25 +104,34 @@ func (r *Service) ListItems(gvk schema.GroupVersionKind, scope v1.ResourceScope)
115
104
}
116
105
}
117
106
118
- if err = r .runtimeClient .List (ctx , list , opts ... ); err != nil {
119
- log .Error ().Err (err ).Msg ("Unable to list objects" )
120
- return nil , pkgErrors .Wrap (err , "unable to list objects" )
107
+ if val , ok := p .Args [LabelSelectorArg ].(string ); ok && val != "" {
108
+ selector , err := labels .Parse (val )
109
+ if err != nil {
110
+ log .Error ().Err (err ).Str (LabelSelectorArg , val ).Msg ("Unable to parse given label selector" )
111
+ return nil , err
112
+ }
113
+ opts = append (opts , client.MatchingLabelsSelector {Selector : selector })
121
114
}
122
115
123
- sortBy , err := getStringArg ( p . Args , SortByArg , false )
124
- if err != nil {
116
+ if err = r . runtimeClient . List ( ctx , list , opts ... ); err != nil {
117
+ log . Error (). Err ( err ). Str ( "scope" , string ( scope )). Msg ( "Unable to list objects" )
125
118
return nil , err
126
119
}
127
120
128
- err = validateSortBy ( list . Items , sortBy )
121
+ sortBy , err := getStringArg ( p . Args , SortByArg , false )
129
122
if err != nil {
130
- log .Error ().Err (err ).Str (SortByArg , sortBy ).Msg ("Invalid sortBy field path" )
131
123
return nil , err
132
124
}
133
125
134
- sort .Slice (list .Items , func (i , j int ) bool {
135
- return compareUnstructured (list .Items [i ], list .Items [j ], sortBy ) < 0
136
- })
126
+ if sortBy != "" {
127
+ if err := validateSortBy (list .Items , sortBy ); err != nil {
128
+ log .Error ().Err (err ).Str (SortByArg , sortBy ).Msg ("Invalid sortBy field path" )
129
+ return nil , err
130
+ }
131
+ sort .Slice (list .Items , func (i , j int ) bool {
132
+ return compareUnstructured (list .Items [i ], list .Items [j ], sortBy ) < 0
133
+ })
134
+ }
137
135
138
136
items := make ([]map [string ]any , len (list .Items ))
139
137
for i , item := range list .Items {
@@ -471,6 +469,6 @@ func (r *Service) RuntimeClient() client.WithWatch {
471
469
}
472
470
473
471
// RelationResolver creates a GraphQL resolver for relation fields
474
- func (r * Service ) RelationResolver (fieldName string ) graphql.FieldResolveFn {
475
- return r .relationResolver .CreateResolver (fieldName )
472
+ func (r * Service ) RelationResolver (fieldName string , gvk schema. GroupVersionKind ) graphql.FieldResolveFn {
473
+ return r .relationResolver .CreateResolver (fieldName , gvk )
476
474
}
0 commit comments