Skip to content

Commit 8a58bac

Browse files
authored
MGMT-20175: mark upgrade in progress status earlier (#101)
Signed-off-by: Riccardo Piccoli <rpiccoli@redhat.com>
1 parent 24086c8 commit 8a58bac

File tree

2 files changed

+55
-13
lines changed

2 files changed

+55
-13
lines changed

controlplane/internal/controller/openshiftassistedcontrolplane_controller.go

+20-13
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,24 @@ func (r *OpenshiftAssistedControlPlaneReconciler) Reconcile(ctx context.Context,
219219
}
220220

221221
func (r *OpenshiftAssistedControlPlaneReconciler) upgradeWorkloadCluster(ctx context.Context, cluster *clusterv1.Cluster, oacp *controlplanev1alpha2.OpenshiftAssistedControlPlane, log logr.Logger, pullSecret []byte) (ctrl.Result, error) {
222-
// Retrieve KubeConfig
222+
var isUpdateInProgress bool
223+
defer func() {
224+
if isUpdateInProgress || !isWorkloadClusterRunningDesiredVersion(oacp) {
225+
conditions.MarkFalse(
226+
oacp,
227+
controlplanev1alpha2.UpgradeCompletedCondition,
228+
controlplanev1alpha2.UpgradeInProgressReason,
229+
clusterv1.ConditionSeverityInfo,
230+
"upgrade to version %s in progress",
231+
oacp.Spec.DistributionVersion,
232+
)
233+
return
234+
}
235+
if conditions.IsFalse(oacp, controlplanev1alpha2.UpgradeCompletedCondition) {
236+
conditions.MarkTrue(oacp, controlplanev1alpha2.UpgradeCompletedCondition)
237+
}
238+
}()
239+
223240
kubeConfig, err := util.GetWorkloadKubeconfig(ctx, r.Client, cluster.Name, cluster.Namespace)
224241
if err != nil {
225242
return ctrl.Result{}, err
@@ -229,20 +246,11 @@ func (r *OpenshiftAssistedControlPlaneReconciler) upgradeWorkloadCluster(ctx con
229246
if err != nil {
230247
return ctrl.Result{}, err
231248
}
232-
isUpdateInProgress, err := upgrader.IsUpgradeInProgress(ctx)
249+
isUpdateInProgress, err = upgrader.IsUpgradeInProgress(ctx)
233250
if err != nil {
234251
return ctrl.Result{}, err
235252
}
236-
if isUpdateInProgress {
237-
conditions.MarkFalse(
238-
oacp,
239-
controlplanev1alpha2.UpgradeCompletedCondition,
240-
controlplanev1alpha2.UpgradeInProgressReason,
241-
clusterv1.ConditionSeverityInfo,
242-
"upgrade to version %s in progress",
243-
oacp.Spec.DistributionVersion,
244-
)
245-
}
253+
246254
oacp.Status.DistributionVersion, err = upgrader.GetCurrentVersion(ctx)
247255
if err != nil {
248256
log.V(logutil.WarningLevel).Info("failed to get OpenShift version from ClusterVersion", "error", err.Error())
@@ -264,7 +272,6 @@ func (r *OpenshiftAssistedControlPlaneReconciler) upgradeWorkloadCluster(ctx con
264272
if isWorkloadClusterRunningDesiredVersion(oacp) && !isUpdateInProgress {
265273
log.V(logutil.WarningLevel).Info("Cluster is now running expected version, upgraded completed")
266274

267-
conditions.MarkTrue(oacp, controlplanev1alpha2.UpgradeCompletedCondition)
268275
return ctrl.Result{}, nil
269276
}
270277

controlplane/internal/controller/openshiftassistedcontrolplane_controller_test.go

+35
Original file line numberDiff line numberDiff line change
@@ -425,13 +425,24 @@ var _ = Describe("Upgrade scenarios", func() {
425425
mockUpgrader.EXPECT().GetCurrentVersion(gomock.Any()).Return(desiredVersion, nil)
426426
mockUpgrader.EXPECT().IsDesiredVersionUpdated(gomock.Any(), desiredVersion).Return(true, nil)
427427

428+
// Make sure upgrade is in progress: once we reconcile it should be marked as complete
429+
conditions.MarkFalse(
430+
openshiftAssistedControlPlane,
431+
controlplanev1alpha2.UpgradeCompletedCondition,
432+
controlplanev1alpha2.UpgradeInProgressReason,
433+
clusterv1.ConditionSeverityWarning,
434+
"upgrade in progress",
435+
)
436+
Expect(k8sClient.Status().Update(ctx, openshiftAssistedControlPlane)).To(Succeed())
437+
428438
result, err := controllerReconciler.Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName})
429439
Expect(err).NotTo(HaveOccurred())
430440
Expect(result).To(Equal(ctrlruntime.Result{}))
431441

432442
err = k8sClient.Get(ctx, typeNamespacedName, openshiftAssistedControlPlane)
433443
Expect(err).NotTo(HaveOccurred())
434444
Expect(openshiftAssistedControlPlane.Status.DistributionVersion).To(Equal(desiredVersion))
445+
435446
condition := conditions.Get(openshiftAssistedControlPlane, controlplanev1alpha2.UpgradeCompletedCondition)
436447
Expect(condition).NotTo(BeNil())
437448
Expect(condition.Status).To(Equal(corev1.ConditionTrue))
@@ -445,9 +456,23 @@ var _ = Describe("Upgrade scenarios", func() {
445456
mockUpgrader.EXPECT().IsDesiredVersionUpdated(gomock.Any(), desiredVersion).Return(false, nil)
446457
mockUpgrader.EXPECT().UpdateClusterVersionDesiredUpdate(gomock.Any(), desiredVersion, gomock.Any()).Return(expectedError)
447458

459+
// Make sure upgrade is in progress(not completed): even if we get no current version, now the upgrade is over
460+
conditions.MarkFalse(
461+
openshiftAssistedControlPlane,
462+
controlplanev1alpha2.UpgradeCompletedCondition,
463+
controlplanev1alpha2.UpgradeInProgressReason,
464+
clusterv1.ConditionSeverityWarning,
465+
"upgrade in progress",
466+
)
467+
448468
_, err := controllerReconciler.Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName})
449469
Expect(err).To(HaveOccurred())
450470
Expect(err).To(Equal(expectedError))
471+
472+
// Upgrade is in progres: spec.distributionVersion is 4.15 and status.distributionVersion is 4.14
473+
condition := conditions.Get(openshiftAssistedControlPlane, controlplanev1alpha2.UpgradeCompletedCondition)
474+
Expect(condition).NotTo(BeNil())
475+
Expect(condition.Status).To(Equal(corev1.ConditionFalse))
451476
})
452477

453478
It("should handle errors getting current version", func() {
@@ -463,6 +488,10 @@ var _ = Describe("Upgrade scenarios", func() {
463488
err = k8sClient.Get(ctx, typeNamespacedName, openshiftAssistedControlPlane)
464489
Expect(err).NotTo(HaveOccurred())
465490
Expect(openshiftAssistedControlPlane.Status.DistributionVersion).To(Equal(""))
491+
492+
// upgrade never requested, condition should still be nil
493+
condition := conditions.Get(openshiftAssistedControlPlane, controlplanev1alpha2.UpgradeCompletedCondition)
494+
Expect(condition).To(BeNil())
466495
})
467496

468497
It("should handle upgrade with repository override", func() {
@@ -488,6 +517,12 @@ var _ = Describe("Upgrade scenarios", func() {
488517

489518
_, err := controllerReconciler.Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedName})
490519
Expect(err).NotTo(HaveOccurred())
520+
521+
err = k8sClient.Get(ctx, typeNamespacedName, openshiftAssistedControlPlane)
522+
Expect(err).NotTo(HaveOccurred())
523+
condition := conditions.Get(openshiftAssistedControlPlane, controlplanev1alpha2.UpgradeCompletedCondition)
524+
Expect(condition).NotTo(BeNil())
525+
Expect(condition.Status).To(Equal(corev1.ConditionFalse))
491526
})
492527
})
493528

0 commit comments

Comments
 (0)