Skip to content

Commit 2815e41

Browse files
committed
Added logic to check if spec is invalid for an upgrade and return until
spec is fixed. Also updated conditions
1 parent 8fd3bb2 commit 2815e41

File tree

1 file changed

+46
-47
lines changed

1 file changed

+46
-47
lines changed

internal/bridge/crunchybridgecluster/crunchybridgecluster_controller.go

+46-47
Original file line numberDiff line numberDiff line change
@@ -265,12 +265,13 @@ func (r *CrunchyBridgeClusterReconciler) Reconcile(ctx context.Context, req ctrl
265265
return ctrl.Result{}, nil
266266
}
267267

268-
// Remove cluster invalid status if found
269-
if invalid != nil &&
270-
invalid.Status == metav1.ConditionFalse &&
271-
invalid.Reason == "ClusterInvalid" {
272-
meta.RemoveStatusCondition(&crunchybridgecluster.Status.Conditions,
273-
v1beta1.ConditionCreating)
268+
invalidUpgrade := meta.FindStatusCondition(crunchybridgecluster.Status.Conditions,
269+
v1beta1.ConditionUpgrading)
270+
if invalidUpgrade != nil &&
271+
invalidUpgrade.Status == metav1.ConditionFalse &&
272+
invalidUpgrade.Reason == "UpgradeError" &&
273+
invalidUpgrade.ObservedGeneration == crunchybridgecluster.GetGeneration() {
274+
return ctrl.Result{}, nil
274275
}
275276

276277
// We should only be missing the ID if no create has been issued
@@ -355,9 +356,8 @@ func (r *CrunchyBridgeClusterReconciler) Reconcile(ctx context.Context, req ctrl
355356
ObservedGeneration: crunchybridgecluster.GetGeneration(),
356357
Type: v1beta1.ConditionUpgrading,
357358
Status: metav1.ConditionUnknown,
358-
Reason: "NoUpgradesInProgress",
359-
Message: fmt.Sprintf(
360-
"No upgrades in progress for Crunchy Bridge Cluster %v", crunchybridgecluster.Name),
359+
Reason: "UpgradeConditionUnknown",
360+
Message: "The condition of the upgrade(s) is unknown.",
361361
})
362362
return ctrl.Result{RequeueAfter: 3 * time.Minute}, nil
363363
}
@@ -390,7 +390,25 @@ func (r *CrunchyBridgeClusterReconciler) Reconcile(ctx context.Context, req ctrl
390390
return ctrl.Result{}, err
391391
}
392392
clusterUpgradeDetails.AddDataToClusterStatus(crunchybridgecluster)
393-
// TODO: Update the ConditionUpdating status here
393+
if len(clusterUpgradeDetails.Operations) != 0 {
394+
meta.SetStatusCondition(&crunchybridgecluster.Status.Conditions, metav1.Condition{
395+
ObservedGeneration: crunchybridgecluster.GetGeneration(),
396+
Type: v1beta1.ConditionUpgrading,
397+
Status: metav1.ConditionTrue,
398+
Reason: clusterUpgradeDetails.Operations[0].Flavor,
399+
Message: fmt.Sprintf(
400+
"Performing an upgrade of type %v with a state of %v.",
401+
clusterUpgradeDetails.Operations[0].Flavor, clusterUpgradeDetails.Operations[0].State),
402+
})
403+
} else {
404+
meta.SetStatusCondition(&crunchybridgecluster.Status.Conditions, metav1.Condition{
405+
ObservedGeneration: crunchybridgecluster.GetGeneration(),
406+
Type: v1beta1.ConditionUpgrading,
407+
Status: metav1.ConditionFalse,
408+
Reason: "NoUpgradesInProgress",
409+
Message: "No upgrades being performed",
410+
})
411+
}
394412

395413
// Reconcile roles and their secrets
396414
err = r.reconcilePostgresRoles(ctx, key, crunchybridgecluster)
@@ -409,17 +427,6 @@ func (r *CrunchyBridgeClusterReconciler) Reconcile(ctx context.Context, req ctrl
409427
// TODO(crunchybridgecluster): Do we want the operator to interrupt
410428
// upgrades created through the GUI/API?
411429
if len(crunchybridgecluster.Status.OngoingUpgrade) != 0 {
412-
for _, operation := range clusterUpgradeDetails.Operations {
413-
meta.SetStatusCondition(&crunchybridgecluster.Status.Conditions, metav1.Condition{
414-
ObservedGeneration: crunchybridgecluster.GetGeneration(),
415-
Type: v1beta1.ConditionUpgrading,
416-
Status: metav1.ConditionTrue,
417-
Reason: operation.Flavor,
418-
Message: fmt.Sprintf(
419-
"Performing an upgrade of type %v with a state of %v on Crunchy Bridge Cluster %v",
420-
operation.Flavor, operation.State, crunchybridgecluster.Name),
421-
})
422-
}
423430
return ctrl.Result{RequeueAfter: 3 * time.Minute}, nil
424431
}
425432

@@ -438,14 +445,6 @@ func (r *CrunchyBridgeClusterReconciler) Reconcile(ctx context.Context, req ctrl
438445
if crunchybridgecluster.Spec.IsHA != *crunchybridgecluster.Status.IsHA {
439446
return r.handleUpgradeHA(ctx, key, crunchybridgecluster)
440447
}
441-
meta.SetStatusCondition(&crunchybridgecluster.Status.Conditions, metav1.Condition{
442-
ObservedGeneration: crunchybridgecluster.GetGeneration(),
443-
Type: v1beta1.ConditionUpgrading,
444-
Status: metav1.ConditionUnknown,
445-
Reason: "NoUpgradesInProgress",
446-
Message: fmt.Sprintf(
447-
"No upgrades in progress for Crunchy Bridge Cluster %v", crunchybridgecluster.Name),
448-
})
449448

450449
// Check if there's a difference in is_protected, name, maintenance_window_start, etc.
451450
// see https://docs.crunchybridge.com/api/cluster#update-cluster
@@ -513,23 +512,22 @@ func (r *CrunchyBridgeClusterReconciler) handleUpgrade(ctx context.Context,
513512
Status: metav1.ConditionFalse,
514513
Reason: "UpgradeError",
515514
Message: fmt.Sprintf(
516-
"Error performing an upgrade, please check your spec for errors or invalid values"+
517-
"for cluster %v", crunchybridgecluster.Name),
515+
"Error performing an upgrade: %s", err),
518516
})
519517
log.Error(err, "Error while attempting cluster upgrade")
520518
return ctrl.Result{}, nil
521519
}
522520
clusterUpgrade.AddDataToClusterStatus(crunchybridgecluster)
523521

524-
for _, operation := range clusterUpgrade.Operations {
522+
if len(clusterUpgrade.Operations) != 0 {
525523
meta.SetStatusCondition(&crunchybridgecluster.Status.Conditions, metav1.Condition{
526524
ObservedGeneration: crunchybridgecluster.GetGeneration(),
527525
Type: v1beta1.ConditionUpgrading,
528526
Status: metav1.ConditionTrue,
529-
Reason: operation.Flavor,
527+
Reason: clusterUpgrade.Operations[0].Flavor,
530528
Message: fmt.Sprintf(
531-
"Performing an upgrade of type %v with a state of %v on Crunchy Bridge Cluster %v",
532-
operation.Flavor, operation.State, crunchybridgecluster.Name),
529+
"Performing an upgrade of type %v with a state of %v.",
530+
clusterUpgrade.Operations[0].Flavor, clusterUpgrade.Operations[0].State),
533531
})
534532
}
535533
return ctrl.Result{RequeueAfter: 3 * time.Minute}, nil
@@ -559,24 +557,25 @@ func (r *CrunchyBridgeClusterReconciler) handleUpgradeHA(ctx context.Context,
559557
ObservedGeneration: crunchybridgecluster.GetGeneration(),
560558
Type: v1beta1.ConditionUpgrading,
561559
Status: metav1.ConditionFalse,
562-
Reason: "HAUpgradeError",
560+
Reason: "UpgradeError",
563561
Message: fmt.Sprintf(
564-
"Error performing an HA upgrade, please check your spec for errors or invalid values"+
565-
"for cluster %v", crunchybridgecluster.Name),
562+
"Error performing an HA upgrade %v:", err),
566563
})
567564
log.Error(err, "Error while attempting cluster HA change")
568565
return ctrl.Result{}, nil
569566
}
570567
clusterUpgrade.AddDataToClusterStatus(crunchybridgecluster)
571-
572-
meta.SetStatusCondition(&crunchybridgecluster.Status.Conditions, metav1.Condition{
573-
ObservedGeneration: crunchybridgecluster.GetGeneration(),
574-
Type: v1beta1.ConditionUpgrading,
575-
Status: metav1.ConditionTrue,
576-
Reason: "UpgradeInProgress",
577-
Message: fmt.Sprintf(
578-
"HA upgrade in progress to %v on the Crunchy Bridge Cluster %v", action, crunchybridgecluster.Name),
579-
})
568+
if len(clusterUpgrade.Operations) != 0 {
569+
meta.SetStatusCondition(&crunchybridgecluster.Status.Conditions, metav1.Condition{
570+
ObservedGeneration: crunchybridgecluster.GetGeneration(),
571+
Type: v1beta1.ConditionUpgrading,
572+
Status: metav1.ConditionTrue,
573+
Reason: clusterUpgrade.Operations[0].Flavor,
574+
Message: fmt.Sprintf(
575+
"Perfoming an upgrade of type %v with a state of %v:",
576+
clusterUpgrade.Operations[0].Flavor, clusterUpgrade.Operations[0].State),
577+
})
578+
}
580579
return ctrl.Result{RequeueAfter: 3 * time.Minute}, nil
581580
}
582581

0 commit comments

Comments
 (0)