Skip to content

Commit 8adcf7e

Browse files
committed
fixup! [control-operator] finalizer for Environment CRD prohibiting deletion until tasks are gone
1 parent 521c21b commit 8adcf7e

1 file changed

Lines changed: 26 additions & 25 deletions

File tree

control-operator/internal/controller/environment_controller.go

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -198,38 +198,39 @@ const environmentFinalizer = "aliecs.alice.cern/environment-finalizer"
198198
// - https://pkg.go.dev/sigs.k8s.io/controller-runtime@v0.23.1/pkg/reconcile
199199
func (r *EnvironmentReconciler) handleFinalizer(ctx context.Context, environment *aliecsv1alpha1.Environment, log logr.Logger) (ctrl.Result, bool, error) {
200200
if environment.DeletionTimestamp.IsZero() {
201-
if !controllerutil.ContainsFinalizer(environment, environmentFinalizer) {
202-
controllerutil.AddFinalizer(environment, environmentFinalizer)
203-
if err := r.Update(ctx, environment); err != nil {
204-
return ctrl.Result{}, true, err
205-
}
206-
return ctrl.Result{}, true, nil
207-
}
208-
} else {
209201
if controllerutil.ContainsFinalizer(environment, environmentFinalizer) {
210-
tasks := &aliecsv1alpha1.TaskList{}
211-
if err := r.List(ctx, tasks, client.InNamespace(environment.Namespace), client.MatchingLabels{"environment": environment.Name}); err != nil {
212-
return ctrl.Result{}, true, err
213-
}
214-
if len(tasks.Items) > 0 {
215-
for i := range tasks.Items {
216-
if tasks.Items[i].DeletionTimestamp.IsZero() {
217-
if err := r.Delete(ctx, &tasks.Items[i]); err != nil && !k8serrors.IsNotFound(err) {
218-
return ctrl.Result{}, true, err
219-
}
220-
}
221-
}
222-
log.Info("waiting for tasks to be deleted before removing environment", "remaining", len(tasks.Items))
223-
return ctrl.Result{}, true, nil
202+
// finalizer already in place, nothing to do: continue reconciliation
203+
return ctrl.Result{}, false, nil
204+
}
205+
controllerutil.AddFinalizer(environment, environmentFinalizer)
206+
return ctrl.Result{}, true, r.Update(ctx, environment)
207+
}
208+
209+
// environment is being deleted
210+
if !controllerutil.ContainsFinalizer(environment, environmentFinalizer) {
211+
return ctrl.Result{}, true, nil
212+
}
213+
214+
tasks := &aliecsv1alpha1.TaskList{}
215+
if err := r.List(ctx, tasks, client.InNamespace(environment.Namespace), client.MatchingLabels{"environment": environment.Name}); err != nil {
216+
return ctrl.Result{}, true, err
217+
}
218+
219+
if len(tasks.Items) > 0 {
220+
for i := range tasks.Items {
221+
if !tasks.Items[i].DeletionTimestamp.IsZero() {
222+
continue
224223
}
225-
controllerutil.RemoveFinalizer(environment, environmentFinalizer)
226-
if err := r.Update(ctx, environment); err != nil {
224+
if err := r.Delete(ctx, &tasks.Items[i]); err != nil && !k8serrors.IsNotFound(err) {
227225
return ctrl.Result{}, true, err
228226
}
229227
}
228+
log.Info("waiting for tasks to be deleted before removing environment", "remaining", len(tasks.Items))
230229
return ctrl.Result{}, true, nil
231230
}
232-
return ctrl.Result{}, false, nil
231+
232+
controllerutil.RemoveFinalizer(environment, environmentFinalizer)
233+
return ctrl.Result{}, true, r.Update(ctx, environment)
233234
}
234235

235236
func (r *EnvironmentReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {

0 commit comments

Comments
 (0)