diff --git a/controllers/githubactionrunner_controller.go b/controllers/githubactionrunner_controller.go index 65dd35db..1306da33 100644 --- a/controllers/githubactionrunner_controller.go +++ b/controllers/githubactionrunner_controller.go @@ -359,11 +359,18 @@ func (r *GithubActionRunnerReconciler) unregisterRunner(ctx context.Context, cr // handleFinalization will remove runner from github based on presence of finalizer func (r *GithubActionRunnerReconciler) handleFinalization(ctx context.Context, cr *garov1alpha1.GithubActionRunner, list podRunnerPairList) error { - for _, item := range list.getPodsBeingDeletedOrEvicted() { + for _, item := range list.getPodsBeingDeletedOrEvictedOrCompleted() { // TODO - cause of failure should be checked more closely, if it does not exist we can ignore it. If it is a comms error we should stick around if err := r.unregisterRunner(ctx, cr, item); err != nil { return err } + if isCompleted(&item.pod) { + logr.FromContext(ctx).Info("Deleting succeeded pod", "podname", item.pod.Name) + err := r.DeleteResourceIfExists(ctx, &item.pod) + if err != nil { + return err + } + } } return nil diff --git a/controllers/podrunner_types.go b/controllers/podrunner_types.go index 01715a51..6f37a9d3 100644 --- a/controllers/podrunner_types.go +++ b/controllers/podrunner_types.go @@ -93,8 +93,8 @@ func (r podRunnerPairList) getIdles(sortOrder v1alpha1.SortOrder, minTTL time.Du return idles } -func (r podRunnerPairList) getPodsBeingDeletedOrEvicted() []podRunnerPair { +func (r podRunnerPairList) getPodsBeingDeletedOrEvictedOrCompleted() []podRunnerPair { return funk.Filter(r.pairs, func(pair podRunnerPair) bool { - return util.IsBeingDeleted(&pair.pod) || isEvicted(&pair.pod) + return util.IsBeingDeleted(&pair.pod) || isEvicted(&pair.pod) || isCompleted(&pair.pod) }).([]podRunnerPair) } diff --git a/controllers/podutil.go b/controllers/podutil.go index 3dffc375..f693bcf6 100644 --- a/controllers/podutil.go +++ b/controllers/podutil.go @@ -8,3 +8,7 @@ import ( func isEvicted(pod *v1.Pod) bool { return strings.Contains(pod.Status.Reason, "Evicted") } + +func isCompleted(pod *v1.Pod) bool { + return pod.Status.Phase == v1.PodSucceeded +}