From 7ea2e99c7a10d61c1053a5ecd8408f7fd8239aff Mon Sep 17 00:00:00 2001 From: Dmitri Fedotov Date: Wed, 29 Jan 2025 18:49:54 +0200 Subject: [PATCH] Free up `Server` if `ServerClaim` does not exist --- internal/controller/server_controller.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/internal/controller/server_controller.go b/internal/controller/server_controller.go index baf91ad..fd57d16 100644 --- a/internal/controller/server_controller.go +++ b/internal/controller/server_controller.go @@ -390,6 +390,26 @@ func (r *ServerReconciler) handleReservedState(ctx context.Context, log logr.Log } log.V(1).Info("Server boot configuration is ready") + // TODO: fix properly, we need to free up the server if the claim does not exist anymore + if server.Spec.ServerClaimRef != nil { + claim := &metalv1alpha1.ServerClaim{} + err := r.Get(ctx, client.ObjectKey{ + Name: server.Spec.ServerClaimRef.Name, + Namespace: server.Spec.ServerClaimRef.Namespace}, claim) + if err != nil { + if apierrors.IsNotFound(err) { + log.V(1).Info("ServerClaim not found, removing ServerClaimRef", "ServerClaim", server.Spec.ServerClaimRef.Name) + serverBase := server.DeepCopy() + server.Spec.ServerClaimRef = nil + if err := r.Patch(ctx, server, client.MergeFrom(serverBase)); err != nil { + return false, fmt.Errorf("failed to remove ServerClaimRef: %w", err) + } + return false, nil + } + return false, fmt.Errorf("failed to get ServerClaim: %w", err) + } + } + //TODO: handle working Reserved Server that was suddenly powered off but needs to boot from disk if server.Status.PowerState == metalv1alpha1.ServerOffPowerState { if err := r.pxeBootServer(ctx, log, server); err != nil {