in controllers/controller.go [387:426]
func (r *EtcdadmClusterReconciler) reconcileDelete(ctx context.Context, etcdCluster *etcdv1.EtcdadmCluster, cluster *clusterv1.Cluster) (ctrl.Result, error) {
log := ctrl.LoggerFrom(ctx, "cluster", cluster.Name)
log.Info("Reconcile EtcdadmCluster deletion")
etcdMachines, err := collections.GetFilteredMachinesForCluster(ctx, r.uncachedClient, cluster, EtcdClusterMachines(cluster.Name, etcdCluster.Name))
if err != nil {
return ctrl.Result{}, errors.Wrap(err, "Error filtering machines for etcd cluster")
}
if len(etcdMachines) == 0 {
// If no etcd machines are left, remove the finalizer
controllerutil.RemoveFinalizer(etcdCluster, etcdv1.EtcdadmClusterFinalizer)
return ctrl.Result{}, nil
}
ownedMachines := etcdMachines.Filter(collections.OwnedMachines(etcdCluster))
// This aggregates the state of all machines
conditions.SetAggregate(etcdCluster, etcdv1.EtcdMachinesReadyCondition, ownedMachines.ConditionGetters(), conditions.AddSourceRef(), conditions.WithStepCounterIf(false))
// Delete etcd machines
machinesToDelete := etcdMachines.Filter(collections.Not(collections.HasDeletionTimestamp))
var errs []error
for _, m := range machinesToDelete {
logger := log.WithValues("machine", m)
if err := r.Client.Delete(ctx, m); err != nil && !apierrors.IsNotFound(err) {
logger.Error(err, "Failed to cleanup owned machine")
errs = append(errs, err)
}
}
if len(errs) > 0 {
err := kerrors.NewAggregate(errs)
r.recorder.Eventf(etcdCluster, corev1.EventTypeWarning, "FailedDelete",
"Failed to delete etcd Machines for cluster %s/%s: %v", cluster.Namespace, cluster.Name, err)
return ctrl.Result{}, err
}
conditions.MarkFalse(etcdCluster, etcdv1.EtcdClusterResizeCompleted, clusterv1.DeletingReason, clusterv1.ConditionSeverityInfo, "")
// requeue to check if machines are deleted and remove the finalizer
return ctrl.Result{RequeueAfter: 30 * time.Second}, nil
}