diff --git a/operator/internal/controller/fleet_controller.go b/operator/internal/controller/fleet_controller.go index 0b55ce9..9327892 100644 --- a/operator/internal/controller/fleet_controller.go +++ b/operator/internal/controller/fleet_controller.go @@ -57,6 +57,14 @@ func (r *FleetReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl return ctrl.Result{}, err } + // Handle resource deletion + if fleet.DeletionTimestamp != nil || !fleet.GetDeletionTimestamp().IsZero() { + if err := r.handleDeletion(ctx, fleet); err != nil { + return ctrl.Result{Requeue: true}, fmt.Errorf("failed to handle fleet deletion: %w", err) + } + return ctrl.Result{Requeue: true}, nil // Return after so we do not accidentally scale again + } + // Handle finalizer addition if fleet.DeletionTimestamp == nil && !controllerutil.ContainsFinalizer(fleet, FLEET_FINALIZER) { controllerutil.AddFinalizer(fleet, FLEET_FINALIZER) @@ -68,14 +76,6 @@ func (r *FleetReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl return ctrl.Result{Requeue: true}, nil } - // Handle resource deletion - if fleet.DeletionTimestamp != nil || !fleet.GetDeletionTimestamp().IsZero() { - if err := r.handleDeletion(ctx, fleet); err != nil { - return ctrl.Result{}, fmt.Errorf("failed to handle fleet deletion: %w", err) - } - return ctrl.Result{}, nil // Return after so we do not accidentally scale again - } - servers, err := r.getServers(ctx, fleet) if err != nil { return ctrl.Result{Requeue: true}, err diff --git a/operator/internal/controller/gametype_controller.go b/operator/internal/controller/gametype_controller.go index 459fc40..a7bf14c 100644 --- a/operator/internal/controller/gametype_controller.go +++ b/operator/internal/controller/gametype_controller.go @@ -156,19 +156,17 @@ func (r *GameTypeReconciler) handleUpdating(ctx context.Context, gametype *netwo r.emitEvent(gametype, corev1.EventTypeNormal, utils.ReasonGametypeSpecUpdated, "Creating new fleet") res, err := r.handleCreation(ctx, gametype, logger) return res, err, true - } else { - if gametype.Spec.FleetSpec.Scaling.Replicas != gametype.Status.CurrentFleetReplicas { - gametype.Status.CurrentFleetReplicas = gametype.Spec.FleetSpec.Scaling.Replicas - fleet.Spec.Scaling.Replicas = gametype.Spec.FleetSpec.Scaling.Replicas - if err := r.Update(ctx, &fleet); err != nil { - return ctrl.Result{Requeue: true}, err, true - } - err := r.Status().Update(ctx, gametype) - if err != nil { - return ctrl.Result{Requeue: true}, err, true - } - r.emitEventf(gametype, corev1.EventTypeNormal, utils.ReasonGametypeReplicasUpdated, "Scaling gametype to %d", fleet.Spec.Scaling.Replicas) + } else if gametype.Spec.FleetSpec.Scaling.Replicas != gametype.Status.CurrentFleetReplicas { + gametype.Status.CurrentFleetReplicas = gametype.Spec.FleetSpec.Scaling.Replicas + fleet.Spec.Scaling.Replicas = gametype.Spec.FleetSpec.Scaling.Replicas + if err := r.Update(ctx, &fleet); err != nil { + return ctrl.Result{Requeue: true}, err, true } + err := r.Status().Update(ctx, gametype) + if err != nil { + return ctrl.Result{Requeue: true}, err, true + } + r.emitEventf(gametype, corev1.EventTypeNormal, utils.ReasonGametypeReplicasUpdated, "Scaling gametype to %d", fleet.Spec.Scaling.Replicas) } } if len(fleets.Items) > 1 { @@ -180,9 +178,9 @@ func (r *GameTypeReconciler) handleUpdating(ctx context.Context, gametype *netwo oldestFleet = &fleet } } - r.emitEvent(gametype, corev1.EventTypeNormal, utils.ReasonGametypeSpecUpdated, "Deleting extra fleet") if oldestFleet != nil && oldestFleet.GetDeletionTimestamp() == nil { + r.emitEvent(gametype, corev1.EventTypeNormal, utils.ReasonGametypeSpecUpdated, "Deleting extra fleet") if err := r.Delete(ctx, oldestFleet); err != nil { return ctrl.Result{}, err, true } @@ -210,6 +208,7 @@ func (r *GameTypeReconciler) handleDeletion(ctx context.Context, gametype *netwo return err } for _, fleet := range fleets.Items { + r.emitEventf(gametype, corev1.EventTypeNormal, utils.ReasonGameTypeDeleting, "Deleting fleet %s", fleet.Name) if err := r.Delete(ctx, &fleet); err != nil { r.emitEventf(gametype, corev1.EventTypeWarning, utils.ReasonGametypeServersDeleted, "Failed to delete fleet %s", fleet.Name) return err diff --git a/operator/internal/utils/events.go b/operator/internal/utils/events.go index d6469ff..9b7193d 100644 --- a/operator/internal/utils/events.go +++ b/operator/internal/utils/events.go @@ -16,6 +16,7 @@ const ( ReasonFleetScaleServers EventReason = "FleetScaleServers" ReasonGametypeInitialized EventReason = "GametypeInitialized" + ReasonGameTypeDeleting EventReason = "GameTypeDeleting" ReasonGametypeServersDeleted EventReason = "GametypeServersDeleted" ReasonGametypeSpecUpdated EventReason = "GametypeSpecUpdated" ReasonGametypeReplicasUpdated EventReason = "GametypeReplicasUpdated"