@@ -44,6 +44,8 @@ import { getSupportedWorkspaceClasses } from "./cluster-sync-service";
44
44
import { Configuration } from "./config" ;
45
45
import { GRPCError } from "./rpc" ;
46
46
import { isWorkspaceRegion } from "@gitpod/gitpod-protocol/lib/workspace-cluster" ;
47
+ import { getExperimentsClientForBackend } from "@gitpod/gitpod-protocol/lib/experiments/configcat-server" ;
48
+ import { GetWorkspacesRequest , WorkspaceManagerClient } from "@gitpod/ws-manager/lib" ;
47
49
48
50
export interface ClusterServiceServerOptions {
49
51
port : number ;
@@ -148,8 +150,32 @@ export class ClusterService implements IClusterServiceServer {
148
150
tls,
149
151
} ;
150
152
151
- let classConstraints = await getSupportedWorkspaceClasses ( this . clientProvider , newCluster , false ) ;
152
- newCluster . admissionConstraints = admissionConstraints . concat ( classConstraints ) ;
153
+ const enabled = await getExperimentsClientForBackend ( ) . getValueAsync (
154
+ "workspace_classes_backend" ,
155
+ false ,
156
+ { } ,
157
+ ) ;
158
+ if ( enabled ) {
159
+ let classConstraints = await getSupportedWorkspaceClasses ( this . clientProvider , newCluster , false ) ;
160
+ newCluster . admissionConstraints = admissionConstraints . concat ( classConstraints ) ;
161
+ } else {
162
+ // try to connect to validate the config. Throws an exception if it fails.
163
+ await new Promise < void > ( ( resolve , reject ) => {
164
+ const c = this . clientProvider . createConnection ( WorkspaceManagerClient , newCluster ) ;
165
+ c . getWorkspaces ( new GetWorkspacesRequest ( ) , ( err : any ) => {
166
+ if ( err ) {
167
+ reject (
168
+ new GRPCError (
169
+ grpc . status . FAILED_PRECONDITION ,
170
+ `cannot reach ${ req . url } : ${ err . message } ` ,
171
+ ) ,
172
+ ) ;
173
+ } else {
174
+ resolve ( ) ;
175
+ }
176
+ } ) ;
177
+ } ) ;
178
+ }
153
179
154
180
await this . clusterDB . save ( newCluster ) ;
155
181
log . info ( { } , "cluster registered" , { cluster : req . name } ) ;
0 commit comments