Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -265,12 +265,15 @@ func (r *CrunchyBridgeClusterReconciler) Reconcile(ctx context.Context, req ctrl
return ctrl.Result{}, nil
}

// Remove cluster invalid status if found
if invalid != nil &&
invalid.Status == metav1.ConditionFalse &&
invalid.Reason == "ClusterInvalid" {
meta.RemoveStatusCondition(&crunchybridgecluster.Status.Conditions,
v1beta1.ConditionCreating)
// check for an upgrade error and return until observedGeneration has
// been incremented by updating the CR with valid value(s).
invalidUpgrade := meta.FindStatusCondition(crunchybridgecluster.Status.Conditions,
v1beta1.ConditionUpgrading)
if invalidUpgrade != nil &&
invalidUpgrade.Status == metav1.ConditionFalse &&
invalidUpgrade.Reason == "UpgradeError" &&
invalidUpgrade.ObservedGeneration == crunchybridgecluster.GetGeneration() {
return ctrl.Result{}, nil
}

// We should only be missing the ID if no create has been issued
Expand Down Expand Up @@ -350,6 +353,14 @@ func (r *CrunchyBridgeClusterReconciler) Reconcile(ctx context.Context, req ctrl
return ctrl.Result{}, nil
}
crunchybridgecluster.Status.ID = cluster.ID

meta.SetStatusCondition(&crunchybridgecluster.Status.Conditions, metav1.Condition{
ObservedGeneration: crunchybridgecluster.GetGeneration(),
Type: v1beta1.ConditionUpgrading,
Status: metav1.ConditionUnknown,
Reason: "UpgradeConditionUnknown",
Message: "The condition of the upgrade(s) is unknown.",
})
return ctrl.Result{RequeueAfter: 3 * time.Minute}, nil
}

Expand Down Expand Up @@ -381,7 +392,25 @@ func (r *CrunchyBridgeClusterReconciler) Reconcile(ctx context.Context, req ctrl
return ctrl.Result{}, err
}
clusterUpgradeDetails.AddDataToClusterStatus(crunchybridgecluster)
// TODO: Update the ConditionUpdating status here
if len(clusterUpgradeDetails.Operations) != 0 {
meta.SetStatusCondition(&crunchybridgecluster.Status.Conditions, metav1.Condition{
ObservedGeneration: crunchybridgecluster.GetGeneration(),
Type: v1beta1.ConditionUpgrading,
Status: metav1.ConditionTrue,
Reason: clusterUpgradeDetails.Operations[0].Flavor,
Message: fmt.Sprintf(
"Performing an upgrade of type %v with a state of %v.",
clusterUpgradeDetails.Operations[0].Flavor, clusterUpgradeDetails.Operations[0].State),
})
} else {
meta.SetStatusCondition(&crunchybridgecluster.Status.Conditions, metav1.Condition{
ObservedGeneration: crunchybridgecluster.GetGeneration(),
Type: v1beta1.ConditionUpgrading,
Status: metav1.ConditionFalse,
Reason: "NoUpgradesInProgress",
Message: "No upgrades being performed",
})
}

// Reconcile roles and their secrets
err = r.reconcilePostgresRoles(ctx, key, crunchybridgecluster)
Expand Down Expand Up @@ -479,11 +508,30 @@ func (r *CrunchyBridgeClusterReconciler) handleUpgrade(ctx context.Context,
// TODO(crunchybridgecluster): consider what errors we might get
// and what different results/requeue times we want to return.
// Currently: don't requeue and wait for user to change spec.
meta.SetStatusCondition(&crunchybridgecluster.Status.Conditions, metav1.Condition{
ObservedGeneration: crunchybridgecluster.GetGeneration(),
Type: v1beta1.ConditionUpgrading,
Status: metav1.ConditionFalse,
Reason: "UpgradeError",
Message: fmt.Sprintf(
"Error performing an upgrade: %s", err),
})
log.Error(err, "Error while attempting cluster upgrade")
return ctrl.Result{}, nil
}
clusterUpgrade.AddDataToClusterStatus(crunchybridgecluster)

if len(clusterUpgrade.Operations) != 0 {
meta.SetStatusCondition(&crunchybridgecluster.Status.Conditions, metav1.Condition{
ObservedGeneration: crunchybridgecluster.GetGeneration(),
Type: v1beta1.ConditionUpgrading,
Status: metav1.ConditionTrue,
Reason: clusterUpgrade.Operations[0].Flavor,
Message: fmt.Sprintf(
"Performing an upgrade of type %v with a state of %v.",
clusterUpgrade.Operations[0].Flavor, clusterUpgrade.Operations[0].State),
})
}
return ctrl.Result{RequeueAfter: 3 * time.Minute}, nil
}

Expand All @@ -507,11 +555,29 @@ func (r *CrunchyBridgeClusterReconciler) handleUpgradeHA(ctx context.Context,
// TODO(crunchybridgecluster): consider what errors we might get
// and what different results/requeue times we want to return.
// Currently: don't requeue and wait for user to change spec.
meta.SetStatusCondition(&crunchybridgecluster.Status.Conditions, metav1.Condition{
ObservedGeneration: crunchybridgecluster.GetGeneration(),
Type: v1beta1.ConditionUpgrading,
Status: metav1.ConditionFalse,
Reason: "UpgradeError",
Message: fmt.Sprintf(
"Error performing an HA upgrade: %s", err),
})
log.Error(err, "Error while attempting cluster HA change")
return ctrl.Result{}, nil
}
clusterUpgrade.AddDataToClusterStatus(crunchybridgecluster)

if len(clusterUpgrade.Operations) != 0 {
meta.SetStatusCondition(&crunchybridgecluster.Status.Conditions, metav1.Condition{
ObservedGeneration: crunchybridgecluster.GetGeneration(),
Type: v1beta1.ConditionUpgrading,
Status: metav1.ConditionTrue,
Reason: clusterUpgrade.Operations[0].Flavor,
Message: fmt.Sprintf(
"Perfoming an upgrade of type %v with a state of %v.",
clusterUpgrade.Operations[0].Flavor, clusterUpgrade.Operations[0].State),
})
}
return ctrl.Result{RequeueAfter: 3 * time.Minute}, nil
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -182,12 +182,12 @@ type UpgradeOperation struct {
// TODO(crunchybridgecluster) Think through conditions
// CrunchyBridgeClusterStatus condition types.
const (
ConditionUnknown = ""
ConditionPending = "Pending"
ConditionCreating = "Creating"
ConditionUpdating = "Updating"
ConditionReady = "Ready"
ConditionDeleting = "Deleting"
ConditionUnknown = ""
ConditionPending = "Pending"
ConditionCreating = "Creating"
ConditionUpgrading = "Upgrading"
ConditionReady = "Ready"
ConditionDeleting = "Deleting"
)

// +kubebuilder:object:root=true
Expand Down