Skip to content

Commit

Permalink
Fix CR Status update in Workspace controller (#457)
Browse files Browse the repository at this point in the history
  • Loading branch information
arybolovlev authored Aug 6, 2024
1 parent 06bb96b commit a3ff38b
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 7 deletions.
5 changes: 5 additions & 0 deletions .changes/unreleased/BUG FIXES-457-20240805-112846.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
kind: BUG FIXES
body: '`Workspace`: Fix an issue where the controller fails to update CR Status when CR gets modified during the reconciliation.'
time: 2024-08-05T11:28:46.175567+02:00
custom:
PR: "457"
20 changes: 13 additions & 7 deletions controllers/workspace_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -209,9 +209,10 @@ func applyMethodToBool(applyMethod string) bool {
}

func (r *WorkspaceReconciler) addFinalizer(ctx context.Context, instance *appv1alpha2.Workspace) error {
patch := client.MergeFrom(instance.DeepCopy())
controllerutil.AddFinalizer(instance, workspaceFinalizer)

return r.Update(ctx, instance)
return r.Patch(ctx, instance, patch)
}

func (r *WorkspaceReconciler) removeFinalizer(ctx context.Context, w *workspaceInstance) error {
Expand All @@ -232,7 +233,6 @@ func (r *WorkspaceReconciler) removeFinalizer(ctx context.Context, w *workspaceI
func (r *WorkspaceReconciler) updateStatus(ctx context.Context, w *workspaceInstance, workspace *tfc.Workspace) error {
w.instance.Status.ObservedGeneration = w.instance.Generation
w.instance.Status.UpdateAt = workspace.UpdatedAt.Unix()
w.instance.Status.WorkspaceID = workspace.ID
w.instance.Status.TerraformVersion = workspace.TerraformVersion

return r.Status().Update(ctx, &w.instance)
Expand Down Expand Up @@ -292,9 +292,14 @@ func (r *WorkspaceReconciler) createWorkspace(ctx context.Context, w *workspaceI
return nil, err
}

w.instance.Status = appv1alpha2.WorkspaceStatus{
WorkspaceID: workspace.ID,
patch := client.MergeFrom(w.instance.DeepCopy())
w.instance.Status.WorkspaceID = workspace.ID
if err = r.Status().Patch(ctx, &w.instance, patch); err != nil {
w.log.Error(err, "Reconcile Workspace", "msg", "failed to update status with workspace ID")
r.Recorder.Event(&w.instance, corev1.EventTypeWarning, "ReconcileWorkspace", "Failed to update status with workspace ID")
return nil, err
}
w.log.Info("Reconcile Workspace", "msg", "successfully updated status with workspace ID")

return workspace, nil
}
Expand Down Expand Up @@ -461,12 +466,13 @@ func (r *WorkspaceReconciler) reconcileWorkspace(ctx context.Context, w *workspa
// - Let Objects update their own status conditions
// - Simplify updateStatus method in a way it could be called anytime
if workspace != nil && workspace.ID != "" {
patch := client.MergeFrom(w.instance.DeepCopy())
w.instance.Status.WorkspaceID = workspace.ID
err = r.Status().Update(ctx, &w.instance)
if err != nil {
w.log.Error(err, "Workspace Controller", "msg", "update status with workspace ID")
if err := r.Status().Patch(ctx, &w.instance, patch); err != nil {
w.log.Error(err, "Workspace Controller", "msg", "failed to update status with workspace ID")
r.Recorder.Event(&w.instance, corev1.EventTypeWarning, "ReconcileWorkspace", "Failed to update status with workspace ID")
}
w.log.Info("Reconcile Workspace", "msg", "successfully updated status with workspace ID")
}
}()

Expand Down

0 comments on commit a3ff38b

Please sign in to comment.