refactor: consolidate Instance phase handlers
This commit is contained in:
@@ -18,7 +18,6 @@ package controller
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"reflect"
|
||||
"time"
|
||||
|
||||
@@ -66,17 +65,12 @@ func (r *PostgreSQLInstanceReconciler) Reconcile(ctx context.Context, req ctrl.R
|
||||
}
|
||||
|
||||
before := instance.DeepCopy()
|
||||
phaseResult := newInstanceStateMachine().reconcile(instance)
|
||||
instance.Status.Phase = phaseResult.phase
|
||||
if phaseResult.reconcilingMessage != "" {
|
||||
setReconcilingCondition(&instance.Status.Conditions, instance.Generation, phaseResult.reconcilingMessage)
|
||||
}
|
||||
|
||||
var reconcileErr error
|
||||
if r.Initializer != nil && instance.DeletionTimestamp.IsZero() &&
|
||||
before.Status.Phase != "" && before.Status.Phase != databasev1alpha1.PostgreSQLInstancePhasePending {
|
||||
reconcileErr = r.reconcileDependencies(ctx, instance)
|
||||
if r.Timeout > 0 {
|
||||
var cancel context.CancelFunc
|
||||
ctx, cancel = context.WithTimeout(ctx, r.Timeout)
|
||||
defer cancel()
|
||||
}
|
||||
result, reconcileErr := newInstanceStateMachine(r.Initializer).reconcile(ctx, instance)
|
||||
|
||||
if !reflect.DeepEqual(before.Status, instance.Status) {
|
||||
if err := r.Status().Patch(ctx, instance, client.MergeFrom(before)); err != nil {
|
||||
@@ -87,56 +81,7 @@ func (r *PostgreSQLInstanceReconciler) Reconcile(ctx context.Context, req ctrl.R
|
||||
}
|
||||
}
|
||||
|
||||
return ctrl.Result{}, reconcileErr
|
||||
}
|
||||
|
||||
func (r *PostgreSQLInstanceReconciler) reconcileDependencies(
|
||||
ctx context.Context,
|
||||
instance *databasev1alpha1.PostgreSQLInstance,
|
||||
) error {
|
||||
if r.Timeout > 0 {
|
||||
var cancel context.CancelFunc
|
||||
ctx, cancel = context.WithTimeout(ctx, r.Timeout)
|
||||
defer cancel()
|
||||
}
|
||||
|
||||
if instance.Status.Phase == databasev1alpha1.PostgreSQLInstancePhaseReady &&
|
||||
instance.Status.ObservedGeneration != instance.Generation {
|
||||
instance.Status.Phase = databasev1alpha1.PostgreSQLInstancePhaseValidating
|
||||
setReconcilingCondition(&instance.Status.Conditions, instance.Generation, "instance dependencies are being validated")
|
||||
return nil
|
||||
}
|
||||
|
||||
var version string
|
||||
var err error
|
||||
switch instance.Status.Phase {
|
||||
case databasev1alpha1.PostgreSQLInstancePhaseValidating:
|
||||
version, err = r.Initializer.Validate(ctx, instance)
|
||||
if err == nil {
|
||||
instance.Status.PostgreSQLVersion = version
|
||||
instance.Status.Phase = databasev1alpha1.PostgreSQLInstancePhaseInitializingRegistry
|
||||
setReconcilingCondition(&instance.Status.Conditions, instance.Generation, "PostgreSQL registry is being initialized")
|
||||
}
|
||||
case databasev1alpha1.PostgreSQLInstancePhaseInitializingRegistry:
|
||||
version, err = r.Initializer.InitializeRegistry(ctx, instance)
|
||||
if err == nil {
|
||||
instance.Status.PostgreSQLVersion = version
|
||||
instance.Status.Phase = databasev1alpha1.PostgreSQLInstancePhaseReady
|
||||
instance.Status.ObservedGeneration = instance.Generation
|
||||
setReadyCondition(&instance.Status.Conditions, instance.Generation, "instance dependencies are ready")
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
instance.Status.ObservedGeneration = instance.Generation
|
||||
reason := databasev1alpha1.ReasonDependencyUnavailable
|
||||
var categorized interface{ ConditionReason() string }
|
||||
if errors.As(err, &categorized) {
|
||||
reason = categorized.ConditionReason()
|
||||
}
|
||||
setFailedCondition(&instance.Status.Conditions, instance.Generation, reason,
|
||||
"instance dependency validation failed")
|
||||
}
|
||||
return err
|
||||
return result, reconcileErr
|
||||
}
|
||||
|
||||
// SetupWithManager sets up the controller with the Manager.
|
||||
|
||||
Reference in New Issue
Block a user