Skip to content

Commit 19ea7a5

Browse files
committed
ensure we build restCfg once
On-behalf-of: @SAP [email protected] Signed-off-by: Artem Shcherbatiuk <[email protected]>
1 parent bb6481f commit 19ea7a5

File tree

2 files changed

+20
-25
lines changed

2 files changed

+20
-25
lines changed

gateway/manager/targetcluster/cluster.go

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -62,34 +62,38 @@ type TargetCluster struct {
6262
log *logger.Logger
6363
}
6464

65-
// NewTargetCluster creates a new TargetCluster from a schema file
65+
// NewTargetCluster creates a new TargetCluster from pre-parsed definitions and rest config
6666
func NewTargetCluster(
6767
name string,
68-
schemaFilePath string,
68+
definitions map[string]any,
69+
restCfg *rest.Config,
6970
log *logger.Logger,
7071
appCfg appConfig.Config,
7172
roundTripperFactory func(http.RoundTripper, rest.TLSClientConfig) http.RoundTripper,
7273
restMapper meta.RESTMapper,
7374
) (*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")
7780
}
7881

7982
cluster := &TargetCluster{
8083
appCfg: appCfg,
8184
name: name,
8285
log: log,
8386
restMapper: restMapper,
87+
restCfg: restCfg,
8488
}
8589

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 {
8892
return nil, fmt.Errorf("failed to connect to cluster: %w", err)
8993
}
9094

9195
// Create GraphQL schema and handler
92-
if err := cluster.createHandler(fileData.Definitions, appCfg); err != nil {
96+
if err := cluster.createHandler(definitions, appCfg); err != nil {
9397
return nil, fmt.Errorf("failed to create GraphQL handler: %w", err)
9498
}
9599

@@ -101,24 +105,19 @@ func NewTargetCluster(
101105
return cluster, nil
102106
}
103107

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")
109112
}
110113

111114
tc.log.Info().
112115
Str("cluster", tc.name).
113-
Str("host", metadata.Host).
116+
Str("host", tc.restCfg.Host).
114117
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")
116119

117120
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-
}
122121

123122
if roundTripperFactory != nil {
124123
tc.restCfg.Wrap(func(rt http.RoundTripper) http.RoundTripper {
@@ -136,9 +135,8 @@ func (tc *TargetCluster) connect(appCfg appConfig.Config, metadata *ClusterMetad
136135
return fmt.Errorf("failed to create cluster client: %w", err)
137136
}
138137

139-
// Create RESTMapper if not provided
140138
if tc.restMapper == nil {
141-
return fmt.Errorf("rest mapper is required")
139+
return fmt.Errorf("rest mapper is required (initialize before creating TargetCluster)")
142140
}
143141

144142
return nil

gateway/manager/targetcluster/registry.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ import (
1414
appConfig "github.com/openmfp/kubernetes-graphql-gateway/common/config"
1515
"github.com/openmfp/kubernetes-graphql-gateway/gateway/manager/roundtripper"
1616
"k8s.io/client-go/rest"
17-
18-
// mapper
1917
apiutil "sigs.k8s.io/controller-runtime/pkg/client/apiutil"
2018
)
2119

@@ -64,7 +62,6 @@ func (cr *ClusterRegistry) LoadCluster(schemaFilePath string) error {
6462
Str("file", schemaFilePath).
6563
Msg("Loading target cluster")
6664

67-
// Build RESTMapper upfront to avoid hidden init
6865
fileData, err := readSchemaFile(schemaFilePath)
6966
if err != nil {
7067
return fmt.Errorf("failed to read schema file: %w", err)
@@ -89,7 +86,7 @@ func (cr *ClusterRegistry) LoadCluster(schemaFilePath string) error {
8986
}
9087

9188
// Create or update cluster
92-
cluster, err := NewTargetCluster(name, schemaFilePath, cr.log, cr.appCfg, cr.roundTripperFactory, restMapper)
89+
cluster, err := NewTargetCluster(name, fileData.Definitions, cfg, cr.log, cr.appCfg, cr.roundTripperFactory, restMapper)
9390
if err != nil {
9491
return fmt.Errorf("failed to create target cluster %s: %w", name, err)
9592
}

0 commit comments

Comments
 (0)