func()

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
}