@@ -19,7 +19,7 @@ import (
19
19
"github.com/openmfp/kubernetes-graphql-gateway/gateway/schema"
20
20
21
21
// for REST mapper
22
- apiutil "sigs. k8s.io/controller-runtime /pkg/client/apiutil "
22
+ meta " k8s.io/apimachinery /pkg/api/meta "
23
23
)
24
24
25
25
// FileData represents the data extracted from a schema file
@@ -56,6 +56,7 @@ type TargetCluster struct {
56
56
name string
57
57
client client.WithWatch
58
58
restCfg * rest.Config
59
+ restMapper meta.RESTMapper
59
60
handler * GraphQLHandler
60
61
graphqlServer * GraphQLServer
61
62
log * logger.Logger
@@ -68,16 +69,18 @@ func NewTargetCluster(
68
69
log * logger.Logger ,
69
70
appCfg appConfig.Config ,
70
71
roundTripperFactory func (http.RoundTripper , rest.TLSClientConfig ) http.RoundTripper ,
72
+ restMapper meta.RESTMapper ,
71
73
) (* TargetCluster , error ) {
72
74
fileData , err := readSchemaFile (schemaFilePath )
73
75
if err != nil {
74
76
return nil , fmt .Errorf ("failed to read schema file: %w" , err )
75
77
}
76
78
77
79
cluster := & TargetCluster {
78
- appCfg : appCfg ,
79
- name : name ,
80
- log : log ,
80
+ appCfg : appCfg ,
81
+ name : name ,
82
+ log : log ,
83
+ restMapper : restMapper ,
81
84
}
82
85
83
86
// Connect to cluster - use metadata if available, otherwise fall back to standard config
@@ -133,6 +136,11 @@ func (tc *TargetCluster) connect(appCfg appConfig.Config, metadata *ClusterMetad
133
136
return fmt .Errorf ("failed to create cluster client: %w" , err )
134
137
}
135
138
139
+ // Create RESTMapper if not provided
140
+ if tc .restMapper == nil {
141
+ return fmt .Errorf ("rest mapper is required" )
142
+ }
143
+
136
144
return nil
137
145
}
138
146
@@ -168,25 +176,15 @@ func buildConfigFromMetadata(metadata *ClusterMetadata, log *logger.Logger) (*re
168
176
}
169
177
170
178
// createHandler creates the GraphQL schema and handler
171
- func (tc * TargetCluster ) createHandler (definitions map [string ]interface {} , appCfg appConfig.Config ) error {
179
+ func (tc * TargetCluster ) createHandler (definitions map [string ]any , appCfg appConfig.Config ) error {
172
180
// Convert definitions to spec format
173
181
specDefs , err := convertToSpecDefinitions (definitions )
174
182
if err != nil {
175
183
return fmt .Errorf ("failed to convert definitions: %w" , err )
176
184
}
177
185
178
- // Build RESTMapper for this cluster (used by relation resolver)
179
- httpClient , err := rest .HTTPClientFor (tc .restCfg )
180
- if err != nil {
181
- return fmt .Errorf ("failed to create HTTP client: %w" , err )
182
- }
183
- restMapper , err := apiutil .NewDynamicRESTMapper (tc .restCfg , httpClient )
184
- if err != nil {
185
- return fmt .Errorf ("failed to create REST mapper: %w" , err )
186
- }
187
-
188
186
// Create resolver
189
- resolverProvider := resolver .New (tc .log , tc .client , restMapper )
187
+ resolverProvider := resolver .New (tc .log , tc .client , tc . restMapper )
190
188
191
189
// Create schema gateway
192
190
schemaGateway , err := schema .New (tc .log , specDefs , resolverProvider )
@@ -261,7 +259,7 @@ func readSchemaFile(filePath string) (*FileData, error) {
261
259
}
262
260
263
261
// convertToSpecDefinitions converts map definitions to go-openapi spec format
264
- func convertToSpecDefinitions (definitions map [string ]interface {} ) (spec.Definitions , error ) {
262
+ func convertToSpecDefinitions (definitions map [string ]any ) (spec.Definitions , error ) {
265
263
data , err := json .Marshal (definitions )
266
264
if err != nil {
267
265
return nil , fmt .Errorf ("failed to marshal definitions: %w" , err )
0 commit comments