@@ -62,34 +62,38 @@ type TargetCluster struct {
62
62
log * logger.Logger
63
63
}
64
64
65
- // NewTargetCluster creates a new TargetCluster from a schema file
65
+ // NewTargetCluster creates a new TargetCluster from pre-parsed definitions and rest config
66
66
func NewTargetCluster (
67
67
name string ,
68
- schemaFilePath string ,
68
+ definitions map [string ]any ,
69
+ restCfg * rest.Config ,
69
70
log * logger.Logger ,
70
71
appCfg appConfig.Config ,
71
72
roundTripperFactory func (http.RoundTripper , rest.TLSClientConfig ) http.RoundTripper ,
72
73
restMapper meta.RESTMapper ,
73
74
) (* TargetCluster , error ) {
74
- fileData , err := readSchemaFile (schemaFilePath )
75
- if err != nil {
76
- return nil , fmt .Errorf ("failed to read schema file: %w" , err )
75
+ if restMapper == nil {
76
+ return nil , fmt .Errorf ("rest mapper is required" )
77
+ }
78
+ if restCfg == nil {
79
+ return nil , fmt .Errorf ("rest config is required" )
77
80
}
78
81
79
82
cluster := & TargetCluster {
80
83
appCfg : appCfg ,
81
84
name : name ,
82
85
log : log ,
83
86
restMapper : restMapper ,
87
+ restCfg : restCfg ,
84
88
}
85
89
86
- // Connect to cluster - use metadata if available, otherwise fall back to standard config
87
- if err := cluster .connect (appCfg , fileData . ClusterMetadata , roundTripperFactory ); err != nil {
90
+ // Connect to cluster
91
+ if err := cluster .connect (appCfg , roundTripperFactory ); err != nil {
88
92
return nil , fmt .Errorf ("failed to connect to cluster: %w" , err )
89
93
}
90
94
91
95
// Create GraphQL schema and handler
92
- if err := cluster .createHandler (fileData . Definitions , appCfg ); err != nil {
96
+ if err := cluster .createHandler (definitions , appCfg ); err != nil {
93
97
return nil , fmt .Errorf ("failed to create GraphQL handler: %w" , err )
94
98
}
95
99
@@ -101,24 +105,19 @@ func NewTargetCluster(
101
105
return cluster , nil
102
106
}
103
107
104
- // connect establishes connection to the target cluster
105
- func (tc * TargetCluster ) connect (appCfg appConfig.Config , metadata * ClusterMetadata , roundTripperFactory func (http.RoundTripper , rest.TLSClientConfig ) http.RoundTripper ) error {
106
- // All clusters now use metadata from schema files to get kubeconfig
107
- if metadata == nil {
108
- return fmt .Errorf ("cluster %s requires cluster metadata in schema file" , tc .name )
108
+ // connect establishes client connection for the target cluster using provided rest.Config
109
+ func (tc * TargetCluster ) connect (appCfg appConfig.Config , roundTripperFactory func (http.RoundTripper , rest.TLSClientConfig ) http.RoundTripper ) error {
110
+ if tc .restCfg == nil {
111
+ return fmt .Errorf ("rest config is required" )
109
112
}
110
113
111
114
tc .log .Info ().
112
115
Str ("cluster" , tc .name ).
113
- Str ("host" , metadata .Host ).
116
+ Str ("host" , tc . restCfg .Host ).
114
117
Bool ("isVirtualWorkspace" , strings .HasPrefix (tc .name , tc .appCfg .Url .VirtualWorkspacePrefix )).
115
- Msg ("Using cluster metadata from schema file for connection " )
118
+ Msg ("Connecting to cluster with provided config " )
116
119
117
120
var err error
118
- tc .restCfg , err = buildConfigFromMetadata (metadata , tc .log )
119
- if err != nil {
120
- return fmt .Errorf ("failed to build config from metadata: %w" , err )
121
- }
122
121
123
122
if roundTripperFactory != nil {
124
123
tc .restCfg .Wrap (func (rt http.RoundTripper ) http.RoundTripper {
@@ -136,9 +135,8 @@ func (tc *TargetCluster) connect(appCfg appConfig.Config, metadata *ClusterMetad
136
135
return fmt .Errorf ("failed to create cluster client: %w" , err )
137
136
}
138
137
139
- // Create RESTMapper if not provided
140
138
if tc .restMapper == nil {
141
- return fmt .Errorf ("rest mapper is required" )
139
+ return fmt .Errorf ("rest mapper is required (initialize before creating TargetCluster) " )
142
140
}
143
141
144
142
return nil
0 commit comments