Remove finalizers in one pass to speed up cleanups AutoscalingRunnerSet (#3536)
This commit is contained in:
parent
3be7128f9a
commit
9afd93065f
|
|
@ -134,17 +134,11 @@ func (r *AutoscalingRunnerSetReconciler) Reconcile(ctx context.Context, req ctrl
|
||||||
return ctrl.Result{}, err
|
return ctrl.Result{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
requeue, err := r.removeFinalizersFromDependentResources(ctx, autoscalingRunnerSet, log)
|
if err := r.removeFinalizersFromDependentResources(ctx, autoscalingRunnerSet, log); err != nil {
|
||||||
if err != nil {
|
|
||||||
log.Error(err, "Failed to remove finalizers on dependent resources")
|
log.Error(err, "Failed to remove finalizers on dependent resources")
|
||||||
return ctrl.Result{}, err
|
return ctrl.Result{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if requeue {
|
|
||||||
log.Info("Waiting for dependent resources to be deleted")
|
|
||||||
return ctrl.Result{Requeue: true}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Info("Removing finalizer")
|
log.Info("Removing finalizer")
|
||||||
err = patch(ctx, r.Client, autoscalingRunnerSet, func(obj *v1alpha1.AutoscalingRunnerSet) {
|
err = patch(ctx, r.Client, autoscalingRunnerSet, func(obj *v1alpha1.AutoscalingRunnerSet) {
|
||||||
controllerutil.RemoveFinalizer(obj, autoscalingRunnerSetFinalizerName)
|
controllerutil.RemoveFinalizer(obj, autoscalingRunnerSetFinalizerName)
|
||||||
|
|
@ -389,7 +383,7 @@ func (r *AutoscalingRunnerSetReconciler) deleteEphemeralRunnerSets(ctx context.C
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *AutoscalingRunnerSetReconciler) removeFinalizersFromDependentResources(ctx context.Context, autoscalingRunnerSet *v1alpha1.AutoscalingRunnerSet, logger logr.Logger) (requeue bool, err error) {
|
func (r *AutoscalingRunnerSetReconciler) removeFinalizersFromDependentResources(ctx context.Context, autoscalingRunnerSet *v1alpha1.AutoscalingRunnerSet, logger logr.Logger) error {
|
||||||
c := autoscalingRunnerSetFinalizerDependencyCleaner{
|
c := autoscalingRunnerSetFinalizerDependencyCleaner{
|
||||||
client: r.Client,
|
client: r.Client,
|
||||||
autoscalingRunnerSet: autoscalingRunnerSet,
|
autoscalingRunnerSet: autoscalingRunnerSet,
|
||||||
|
|
@ -404,12 +398,7 @@ func (r *AutoscalingRunnerSetReconciler) removeFinalizersFromDependentResources(
|
||||||
c.removeManagerRoleBindingFinalizer(ctx)
|
c.removeManagerRoleBindingFinalizer(ctx)
|
||||||
c.removeManagerRoleFinalizer(ctx)
|
c.removeManagerRoleFinalizer(ctx)
|
||||||
|
|
||||||
requeue, err = c.result()
|
return c.Err()
|
||||||
if err != nil {
|
|
||||||
logger.Error(err, "Failed to cleanup finalizer from dependent resource")
|
|
||||||
return true, err
|
|
||||||
}
|
|
||||||
return requeue, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *AutoscalingRunnerSetReconciler) createRunnerScaleSet(ctx context.Context, autoscalingRunnerSet *v1alpha1.AutoscalingRunnerSet, logger logr.Logger) (ctrl.Result, error) {
|
func (r *AutoscalingRunnerSetReconciler) createRunnerScaleSet(ctx context.Context, autoscalingRunnerSet *v1alpha1.AutoscalingRunnerSet, logger logr.Logger) (ctrl.Result, error) {
|
||||||
|
|
@ -784,17 +773,16 @@ type autoscalingRunnerSetFinalizerDependencyCleaner struct {
|
||||||
autoscalingRunnerSet *v1alpha1.AutoscalingRunnerSet
|
autoscalingRunnerSet *v1alpha1.AutoscalingRunnerSet
|
||||||
logger logr.Logger
|
logger logr.Logger
|
||||||
|
|
||||||
// fields to operate on
|
err error
|
||||||
requeue bool
|
|
||||||
err error
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *autoscalingRunnerSetFinalizerDependencyCleaner) result() (requeue bool, err error) {
|
func (c *autoscalingRunnerSetFinalizerDependencyCleaner) Err() error {
|
||||||
return c.requeue, c.err
|
return c.err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeKubernetesModeRoleBindingFinalizer(ctx context.Context) {
|
func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeKubernetesModeRoleBindingFinalizer(ctx context.Context) {
|
||||||
if c.requeue || c.err != nil {
|
if c.err != nil {
|
||||||
|
c.logger.Info("Skipping cleaning up kubernetes mode service account")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -825,7 +813,6 @@ func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeKubernetesModeRol
|
||||||
c.err = fmt.Errorf("failed to patch kubernetes mode role binding without finalizer: %w", err)
|
c.err = fmt.Errorf("failed to patch kubernetes mode role binding without finalizer: %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.requeue = true
|
|
||||||
c.logger.Info("Removed finalizer from container mode kubernetes role binding", "name", roleBindingName)
|
c.logger.Info("Removed finalizer from container mode kubernetes role binding", "name", roleBindingName)
|
||||||
return
|
return
|
||||||
case err != nil && !kerrors.IsNotFound(err):
|
case err != nil && !kerrors.IsNotFound(err):
|
||||||
|
|
@ -838,7 +825,7 @@ func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeKubernetesModeRol
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeKubernetesModeRoleFinalizer(ctx context.Context) {
|
func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeKubernetesModeRoleFinalizer(ctx context.Context) {
|
||||||
if c.requeue || c.err != nil {
|
if c.err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -868,7 +855,6 @@ func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeKubernetesModeRol
|
||||||
c.err = fmt.Errorf("failed to patch kubernetes mode role without finalizer: %w", err)
|
c.err = fmt.Errorf("failed to patch kubernetes mode role without finalizer: %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.requeue = true
|
|
||||||
c.logger.Info("Removed finalizer from container mode kubernetes role")
|
c.logger.Info("Removed finalizer from container mode kubernetes role")
|
||||||
return
|
return
|
||||||
case err != nil && !kerrors.IsNotFound(err):
|
case err != nil && !kerrors.IsNotFound(err):
|
||||||
|
|
@ -881,7 +867,7 @@ func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeKubernetesModeRol
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeKubernetesModeServiceAccountFinalizer(ctx context.Context) {
|
func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeKubernetesModeServiceAccountFinalizer(ctx context.Context) {
|
||||||
if c.requeue || c.err != nil {
|
if c.err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -912,7 +898,6 @@ func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeKubernetesModeSer
|
||||||
c.err = fmt.Errorf("failed to patch kubernetes mode service account without finalizer: %w", err)
|
c.err = fmt.Errorf("failed to patch kubernetes mode service account without finalizer: %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.requeue = true
|
|
||||||
c.logger.Info("Removed finalizer from container mode kubernetes service account")
|
c.logger.Info("Removed finalizer from container mode kubernetes service account")
|
||||||
return
|
return
|
||||||
case err != nil && !kerrors.IsNotFound(err):
|
case err != nil && !kerrors.IsNotFound(err):
|
||||||
|
|
@ -925,7 +910,7 @@ func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeKubernetesModeSer
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeNoPermissionServiceAccountFinalizer(ctx context.Context) {
|
func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeNoPermissionServiceAccountFinalizer(ctx context.Context) {
|
||||||
if c.requeue || c.err != nil {
|
if c.err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -956,7 +941,6 @@ func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeNoPermissionServi
|
||||||
c.err = fmt.Errorf("failed to patch service account without finalizer: %w", err)
|
c.err = fmt.Errorf("failed to patch service account without finalizer: %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.requeue = true
|
|
||||||
c.logger.Info("Removed finalizer from no permission service account", "name", serviceAccountName)
|
c.logger.Info("Removed finalizer from no permission service account", "name", serviceAccountName)
|
||||||
return
|
return
|
||||||
case err != nil && !kerrors.IsNotFound(err):
|
case err != nil && !kerrors.IsNotFound(err):
|
||||||
|
|
@ -969,7 +953,7 @@ func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeNoPermissionServi
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeGitHubSecretFinalizer(ctx context.Context) {
|
func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeGitHubSecretFinalizer(ctx context.Context) {
|
||||||
if c.requeue || c.err != nil {
|
if c.err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1000,7 +984,6 @@ func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeGitHubSecretFinal
|
||||||
c.err = fmt.Errorf("failed to patch GitHub secret without finalizer: %w", err)
|
c.err = fmt.Errorf("failed to patch GitHub secret without finalizer: %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.requeue = true
|
|
||||||
c.logger.Info("Removed finalizer from GitHub secret", "name", githubSecretName)
|
c.logger.Info("Removed finalizer from GitHub secret", "name", githubSecretName)
|
||||||
return
|
return
|
||||||
case err != nil && !kerrors.IsNotFound(err) && !kerrors.IsForbidden(err):
|
case err != nil && !kerrors.IsNotFound(err) && !kerrors.IsForbidden(err):
|
||||||
|
|
@ -1013,7 +996,7 @@ func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeGitHubSecretFinal
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeManagerRoleBindingFinalizer(ctx context.Context) {
|
func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeManagerRoleBindingFinalizer(ctx context.Context) {
|
||||||
if c.requeue || c.err != nil {
|
if c.err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1044,7 +1027,6 @@ func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeManagerRoleBindin
|
||||||
c.err = fmt.Errorf("failed to patch manager role binding without finalizer: %w", err)
|
c.err = fmt.Errorf("failed to patch manager role binding without finalizer: %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.requeue = true
|
|
||||||
c.logger.Info("Removed finalizer from manager role binding", "name", managerRoleBindingName)
|
c.logger.Info("Removed finalizer from manager role binding", "name", managerRoleBindingName)
|
||||||
return
|
return
|
||||||
case err != nil && !kerrors.IsNotFound(err):
|
case err != nil && !kerrors.IsNotFound(err):
|
||||||
|
|
@ -1057,7 +1039,7 @@ func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeManagerRoleBindin
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeManagerRoleFinalizer(ctx context.Context) {
|
func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeManagerRoleFinalizer(ctx context.Context) {
|
||||||
if c.requeue || c.err != nil {
|
if c.err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1088,7 +1070,6 @@ func (c *autoscalingRunnerSetFinalizerDependencyCleaner) removeManagerRoleFinali
|
||||||
c.err = fmt.Errorf("failed to patch manager role without finalizer: %w", err)
|
c.err = fmt.Errorf("failed to patch manager role without finalizer: %w", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.requeue = true
|
|
||||||
c.logger.Info("Removed finalizer from manager role", "name", managerRoleName)
|
c.logger.Info("Removed finalizer from manager role", "name", managerRoleName)
|
||||||
return
|
return
|
||||||
case err != nil && !kerrors.IsNotFound(err):
|
case err != nil && !kerrors.IsNotFound(err):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue