Skip to content

Commit d17be01

Browse files
committed
Add AtLatestKnown condition
Add a condition to indicate if we are AtLatestKnown version. Condition is set to `True` if `AvailableVersion` == `DeployedVersion`, otherwize not set. With this change we can do: `wait --for condition=MinorUpdateAvailable`, then patch the targetVersion and wait for: `wait --for condition=AtLatestKnown`. It is a nuance, but I think this can be useful for automation using oc wait.
1 parent c1cdd8c commit d17be01

File tree

3 files changed

+38
-8
lines changed

3 files changed

+38
-8
lines changed

apis/core/v1beta1/conditions.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,8 @@ const (
509509
OpenStackVersionMinorUpdateDataplane condition.Type = "MinorUpdateDataplane"
510510

511511
OpenStackVersionMinorUpdateAvailable condition.Type = "MinorUpdateAvailable"
512+
513+
OpenStackVersionAtLatestKnown condition.Type = "AtLatestKnown"
512514
)
513515

514516
// Version Messages used by API objects.
@@ -540,4 +542,7 @@ const (
540542

541543
// OpenStackVersionMinorUpdateAvailableMessage
542544
OpenStackVersionMinorUpdateAvailableMessage = "update available"
545+
546+
// OpenStackVersionMinorUpdateAtLatestKnownMessage
547+
OpenStackVersionMinorUpdateAtLatestKnownMessage = "at latest known"
543548
)

controllers/core/openstackversion_controller.go

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -392,12 +392,26 @@ func (r *OpenStackVersionReconciler) Reconcile(ctx context.Context, req ctrl.Req
392392
Log.Info("Setting DeployedVersion")
393393
instance.Status.DeployedVersion = &instance.Spec.TargetVersion
394394
}
395-
if instance.Status.DeployedVersion != nil &&
396-
*instance.Status.AvailableVersion != *instance.Status.DeployedVersion {
397-
instance.Status.Conditions.Set(condition.TrueCondition(
398-
corev1beta1.OpenStackVersionMinorUpdateAvailable,
399-
corev1beta1.OpenStackVersionMinorUpdateAvailableMessage))
395+
396+
if instance.Status.DeployedVersion != nil {
397+
398+
if *instance.Status.AvailableVersion != *instance.Status.DeployedVersion {
399+
instance.Status.Conditions.Remove(corev1beta1.OpenStackVersionAtLatestKnown)
400+
401+
instance.Status.Conditions.Set(condition.TrueCondition(
402+
corev1beta1.OpenStackVersionMinorUpdateAvailable,
403+
corev1beta1.OpenStackVersionMinorUpdateAvailableMessage))
404+
405+
} else {
406+
instance.Status.Conditions.Remove(corev1beta1.OpenStackVersionMinorUpdateAvailable)
407+
408+
instance.Status.Conditions.Set(condition.TrueCondition(
409+
corev1beta1.OpenStackVersionAtLatestKnown,
410+
corev1beta1.OpenStackVersionMinorUpdateAtLatestKnownMessage))
411+
}
412+
400413
} else {
414+
instance.Status.Conditions.Remove(corev1beta1.OpenStackVersionAtLatestKnown)
401415
instance.Status.Conditions.Remove(corev1beta1.OpenStackVersionMinorUpdateAvailable)
402416
}
403417

tests/functional/ctlplane/openstackversion_controller_test.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,8 @@ var _ = Describe("OpenStackOperator controller", func() {
407407
g.Expect(osversion.Generation).Should(Equal(osversion.Status.ObservedGeneration))
408408

409409
g.Expect(osversion.Status.DeployedVersion).Should(Equal(&initialVersion))
410+
// Should not have OpenStackVersionAtLatestKnown
411+
g.Expect(osversion.Status.Conditions.Has(corev1.OpenStackVersionAtLatestKnown)).To(BeFalse())
410412

411413
}, timeout, interval).Should(Succeed())
412414

@@ -668,15 +670,24 @@ var _ = Describe("OpenStackOperator controller", func() {
668670
osversion := GetOpenStackVersion(names.OpenStackVersionName)
669671
g.Expect(osversion).Should(Not(BeNil()))
670672
g.Expect(osversion.OwnerReferences).Should(HaveLen(1))
673+
// The `AtLatestKnown` condition is True and MinorUpdateAvailable is not set
671674
th.ExpectCondition(
672675
names.OpenStackVersionName,
673676
ConditionGetterFunc(OpenStackVersionConditionGetter),
674-
condition.ReadyCondition,
677+
corev1.OpenStackVersionAtLatestKnown,
675678
k8s_corev1.ConditionTrue,
676679
)
677-
g.Expect(osversion.Status.DeployedVersion).Should(Equal(&updatedVersion)) // we're done here
678-
// no condition which reflects an update is available
679680
g.Expect(osversion.Status.Conditions.Has(corev1.OpenStackVersionMinorUpdateAvailable)).To(BeFalse())
681+
g.Expect(osversion.Status.DeployedVersion).Should(Equal(&updatedVersion)) // we're done here
682+
683+
// Make sure the Ready condition is True, e.g. all conditions are True.
684+
th.ExpectCondition(
685+
names.OpenStackVersionName,
686+
ConditionGetterFunc(OpenStackVersionConditionGetter),
687+
condition.ReadyCondition,
688+
k8s_corev1.ConditionTrue,
689+
)
690+
680691
}, timeout, interval).Should(Succeed())
681692

682693
})

0 commit comments

Comments
 (0)