@@ -171,6 +171,11 @@ func (r *DevWorkspaceReconciler) Reconcile(req ctrl.Request) (reconcileResult ct
171171 flattenedWorkspace , err := flatten .ResolveDevWorkspace (& workspace .Spec .Template , flattenHelpers )
172172 if err != nil {
173173 reqLogger .Info ("DevWorkspace start failed" )
174+ // Clean up cluster deployment
175+ err := provision .ScaleDeploymentToZero (workspace , r .Client )
176+ if err != nil {
177+ return reconcile.Result {}, err
178+ }
174179 reconcileStatus .Phase = devworkspace .WorkspaceStatusFailed
175180 // TODO: Handle error more elegantly
176181 reconcileStatus .Conditions [devworkspace .WorkspaceFailedStart ] = fmt .Sprintf ("Error processing devfile: %s" , err )
@@ -181,6 +186,11 @@ func (r *DevWorkspaceReconciler) Reconcile(req ctrl.Request) (reconcileResult ct
181186 storageProvisioner , err := storage .GetProvisioner (workspace )
182187 if err != nil {
183188 reqLogger .Info ("DevWorkspace start failed" )
189+ // Clean up cluster deployment
190+ err := provision .ScaleDeploymentToZero (workspace , r .Client )
191+ if err != nil {
192+ return reconcile.Result {}, err
193+ }
184194 reconcileStatus .Phase = devworkspace .WorkspaceStatusFailed
185195 reconcileStatus .Conditions [devworkspace .WorkspaceFailedStart ] = fmt .Sprintf ("Error provisioning storage: %s" , err )
186196 return reconcile.Result {}, nil
@@ -197,6 +207,11 @@ func (r *DevWorkspaceReconciler) Reconcile(req ctrl.Request) (reconcileResult ct
197207 devfilePodAdditions , err := containerlib .GetKubeContainersFromDevfile (& workspace .Spec .Template )
198208 if err != nil {
199209 reqLogger .Info ("DevWorkspace start failed" )
210+ // Clean up cluster deployment
211+ err := provision .ScaleDeploymentToZero (workspace , r .Client )
212+ if err != nil {
213+ return reconcile.Result {}, err
214+ }
200215 reconcileStatus .Phase = devworkspace .WorkspaceStatusFailed
201216 reconcileStatus .Conditions [devworkspace .WorkspaceFailedStart ] = fmt .Sprintf ("Error processing devfile: %s" , err )
202217 return reconcile.Result {}, nil
@@ -210,6 +225,11 @@ func (r *DevWorkspaceReconciler) Reconcile(req ctrl.Request) (reconcileResult ct
210225 return reconcile.Result {Requeue : true , RequeueAfter : storageErr .RequeueAfter }, nil
211226 case * storage.ProvisioningError :
212227 reqLogger .Info (fmt .Sprintf ("DevWorkspace start failed: %s" , storageErr ))
228+ // Clean up cluster deployment
229+ err := provision .ScaleDeploymentToZero (workspace , r .Client )
230+ if err != nil {
231+ return reconcile.Result {}, err
232+ }
213233 reconcileStatus .Phase = devworkspace .WorkspaceStatusFailed
214234 reconcileStatus .Conditions [devworkspace .WorkspaceFailedStart ] = fmt .Sprintf ("Error provisioning storage: %s" , storageErr )
215235 return reconcile.Result {}, nil
@@ -234,6 +254,11 @@ func (r *DevWorkspaceReconciler) Reconcile(req ctrl.Request) (reconcileResult ct
234254 if ! routingStatus .Continue {
235255 if routingStatus .FailStartup {
236256 reqLogger .Info ("DevWorkspace start failed" )
257+ // Clean up cluster deployment
258+ err := provision .ScaleDeploymentToZero (workspace , r .Client )
259+ if err != nil {
260+ return reconcile.Result {}, err
261+ }
237262 reconcileStatus .Phase = devworkspace .WorkspaceStatusFailed
238263 // TODO: Propagate failure reason from devWorkspaceRouting
239264 reconcileStatus .Conditions [devworkspace .WorkspaceFailedStart ] = "Failed to install network objects required for devworkspace"
@@ -265,6 +290,11 @@ func (r *DevWorkspaceReconciler) Reconcile(req ctrl.Request) (reconcileResult ct
265290 return reconcile.Result {Requeue : true , RequeueAfter : provisionErr .RequeueAfter }, nil
266291 case * metadata.ProvisioningError :
267292 reqLogger .Info (fmt .Sprintf ("DevWorkspace start failed: %s" , provisionErr ))
293+ // Clean up cluster deployment
294+ err := provision .ScaleDeploymentToZero (workspace , r .Client )
295+ if err != nil {
296+ return reconcile.Result {}, err
297+ }
268298 reconcileStatus .Phase = devworkspace .WorkspaceStatusFailed
269299 reconcileStatus .Conditions [devworkspace .WorkspaceFailedStart ] = fmt .Sprintf ("Error provisioning metadata configmap: %s" , provisionErr )
270300 return reconcile.Result {}, nil
@@ -307,6 +337,12 @@ func (r *DevWorkspaceReconciler) Reconcile(req ctrl.Request) (reconcileResult ct
307337 if ! deploymentStatus .Continue {
308338 if deploymentStatus .FailStartup {
309339 reqLogger .Info ("Workspace start failed" )
340+ // Clean up cluster deployment
341+ err := provision .ScaleDeploymentToZero (workspace , r .Client )
342+ if err != nil {
343+ return reconcile.Result {}, err
344+ }
345+
310346 reconcileStatus .Phase = devworkspace .WorkspaceStatusFailed
311347 reconcileStatus .Conditions [devworkspace .WorkspaceFailedStart ] = fmt .Sprintf ("Devworkspace spec is invalid: %s" , deploymentStatus .Err )
312348 return reconcile.Result {}, deploymentStatus .Err
0 commit comments