in controllers/cloudstackcluster_controller.go [66:112]
func (r *CloudStackClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (retRes ctrl.Result, retErr error) {
log := r.Log.WithValues("cluster", req.Name, "namespace", req.Namespace)
log.V(1).Info("Reconcile CloudStackCluster")
// Get CloudStack cluster.
csCluster := &infrav1.CloudStackCluster{}
if retErr = r.Client.Get(ctx, req.NamespacedName, csCluster); retErr != nil {
if client.IgnoreNotFound(retErr) == nil {
log.Info("Cluster not found.")
}
return ctrl.Result{}, client.IgnoreNotFound(retErr)
}
// Get CAPI cluster.
cluster, retErr := util.GetOwnerCluster(ctx, r.Client, csCluster.ObjectMeta)
if retErr != nil {
return reconcile.Result{}, retErr
} else if cluster == nil {
log.Info("Waiting for CAPI Cluster controller to set owner reference on CloudStack cluster.")
return reconcile.Result{}, nil
}
// Check the cluster is not paused.
if annotations.IsPaused(cluster, csCluster) {
log.Info("Cluster is paused. Refusing to reconcile.")
return reconcile.Result{}, nil
}
// Setup patcher. This ensures modifications to the csCluster copy fetched above are patched into the origin.
if patchHelper, retErr := patch.NewHelper(csCluster, r.Client); retErr != nil {
return ctrl.Result{}, retErr
} else {
defer func() {
if err := patchHelper.Patch(ctx, csCluster); retErr == nil && err != nil {
retErr = err
}
}()
}
// Delete Cluster Resources if deletion timestamp present.
if !csCluster.DeletionTimestamp.IsZero() {
return r.reconcileDelete(log, csCluster)
}
// Reconcile remaining clusters.
return r.reconcile(log, csCluster)
}