@@ -18,6 +18,9 @@ import (
1818 "k8s.io/apimachinery/pkg/runtime"
1919 "k8s.io/apimachinery/pkg/types"
2020 "k8s.io/apimachinery/pkg/util/wait"
21+ "k8s.io/apimachinery/pkg/version"
22+ "k8s.io/client-go/kubernetes"
23+ "k8s.io/client-go/rest"
2124 "k8s.io/client-go/tools/record"
2225 "k8s.io/client-go/util/workqueue"
2326 ctrl "sigs.k8s.io/controller-runtime"
@@ -47,13 +50,20 @@ const (
4750 maintenanceRequeue = 1 * time .Minute
4851)
4952
50- func NewWorkspaceReconciler (c client.Client , scheme * runtime.Scheme , recorder record.EventRecorder , cfg * config.Configuration , reg prometheus.Registerer , maintenance maintenance.Maintenance ) (* WorkspaceReconciler , error ) {
53+ func NewWorkspaceReconciler (c client.Client , restConfig * rest.Config , scheme * runtime.Scheme , recorder record.EventRecorder , cfg * config.Configuration , reg prometheus.Registerer , maintenance maintenance.Maintenance ) (* WorkspaceReconciler , error ) {
54+ // Create kubernetes clientset
55+ kubeClient , err := kubernetes .NewForConfig (restConfig )
56+ if err != nil {
57+ return nil , fmt .Errorf ("failed to create kubernetes client: %w" , err )
58+ }
59+
5160 reconciler := & WorkspaceReconciler {
5261 Client : c ,
5362 Scheme : scheme ,
5463 Config : cfg ,
5564 maintenance : maintenance ,
5665 Recorder : recorder ,
66+ kubeClient : kubeClient ,
5767 }
5868
5969 metrics , err := newControllerMetrics (reconciler )
@@ -75,6 +85,8 @@ type WorkspaceReconciler struct {
7585 metrics * controllerMetrics
7686 maintenance maintenance.Maintenance
7787 Recorder record.EventRecorder
88+
89+ kubeClient kubernetes.Interface
7890}
7991
8092//+kubebuilder:rbac:groups=workspace.gitpod.io,resources=workspaces,verbs=get;list;watch;create;update;patch;delete
@@ -181,7 +193,8 @@ func (r *WorkspaceReconciler) actOnStatus(ctx context.Context, workspace *worksp
181193 // if there isn't a workspace pod and we're not currently deleting this workspace,// create one.
182194 switch {
183195 case workspace .Status .PodStarts == 0 || workspace .Status .PodStarts - workspace .Status .PodRecreated < 1 :
184- sctx , err := newStartWorkspaceContext (ctx , r .Config , workspace )
196+ serverVersion := r .getServerVersion (ctx )
197+ sctx , err := newStartWorkspaceContext (ctx , r .Config , workspace , serverVersion )
185198 if err != nil {
186199 log .Error (err , "unable to create startWorkspace context" )
187200 return ctrl.Result {Requeue : true }, err
@@ -627,6 +640,20 @@ func (r *WorkspaceReconciler) SetupWithManager(mgr ctrl.Manager) error {
627640 Complete (r )
628641}
629642
643+ func (r * WorkspaceReconciler ) getServerVersion (ctx context.Context ) * version.Info {
644+ log := log .FromContext (ctx )
645+
646+ serverVersion , err := r .kubeClient .Discovery ().ServerVersion ()
647+ if err != nil {
648+ log .Error (err , "cannot get server version! Assuming 1.30 going forward" )
649+ serverVersion = & version.Info {
650+ Major : "1" ,
651+ Minor : "30" ,
652+ }
653+ }
654+ return serverVersion
655+ }
656+
630657func SetupIndexer (mgr ctrl.Manager ) error {
631658 var err error
632659 var once sync.Once
0 commit comments