Skip to content

Commit 4f0d0b1

Browse files
committed
OTA-1427: Polish reason and message in Node's status insight
1 parent 7afbeb0 commit 4f0d0b1

File tree

3 files changed

+83
-13
lines changed

3 files changed

+83
-13
lines changed

pkg/updatestatus/mco/layered_node_state.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,13 @@ func (l *LayeredNodeState) GetUnavailableMessage() string {
8484
for _, c := range l.unavailable {
8585
message := c.reason
8686
if message == reasonOfUnavailabilityNodeNotReady {
87-
message = fmt.Sprintf("Node %s is not ready", l.node.Name)
87+
message = "Node is not ready"
8888
}
8989
if message == reasonOfUnavailabilityNodeDiskPressure {
90-
message = fmt.Sprintf("Node %s has disk pressure", l.node.Name)
90+
message = "Node has disk pressure"
9191
}
9292
if message == reasonOfUnavailabilityNodeNetworkUnavailable {
93-
message = fmt.Sprintf("Node %s has unavailable network", l.node.Name)
93+
message = "Node has unavailable network"
9494
}
9595
messages = append(messages, message)
9696
}

pkg/updatestatus/nodeinformer.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,60 +235,76 @@ func isNodeDraining(node *corev1.Node, isUpdating bool) bool {
235235

236236
func determineConditions(pool *machineconfigv1.MachineConfigPool, node *corev1.Node, isUpdating, isUpdated, isUnavailable, isDegraded bool, lns *mco.LayeredNodeState, now metav1.Time) ([]metav1.Condition, string, *metav1.Duration) {
237237
var estimate *metav1.Duration
238-
var message string
239238

240239
updating := metav1.Condition{
241240
Type: string(updatestatus.NodeStatusInsightUpdating),
242241
Status: metav1.ConditionUnknown,
243242
Reason: string(updatestatus.NodeCannotDetermine),
243+
Message: "Cannot determine whether the node is updating",
244244
LastTransitionTime: now,
245245
}
246246
available := metav1.Condition{
247247
Type: string(updatestatus.NodeStatusInsightAvailable),
248248
Status: metav1.ConditionTrue,
249+
Reason: "AsExpected",
250+
Message: "The node is available",
249251
LastTransitionTime: now,
250252
}
251253
degraded := metav1.Condition{
252254
Type: string(updatestatus.NodeStatusInsightDegraded),
253255
Status: metav1.ConditionFalse,
256+
Reason: "AsExpected",
257+
Message: "The node is not degraded",
254258
LastTransitionTime: now,
255259
}
256260

257261
if isUpdating && isNodeDraining(node, isUpdating) {
258262
estimate = toPointer(10 * time.Minute)
259263
updating.Status = metav1.ConditionTrue
260264
updating.Reason = string(updatestatus.NodeDraining)
265+
updating.Message = "The node is draining"
261266
} else if isUpdating {
262267
state := node.Annotations[mco.MachineConfigDaemonStateAnnotationKey]
263268
switch state {
264269
case mco.MachineConfigDaemonStateRebooting:
265270
estimate = toPointer(10 * time.Minute)
266271
updating.Status = metav1.ConditionTrue
267272
updating.Reason = string(updatestatus.NodeRebooting)
273+
updating.Message = "The node is rebooting"
268274
case mco.MachineConfigDaemonStateDone:
269275
estimate = toPointer(time.Duration(0))
270276
updating.Status = metav1.ConditionFalse
271277
updating.Reason = string(updatestatus.NodeCompleted)
278+
updating.Message = "The node is updated"
272279
default:
273280
estimate = toPointer(10 * time.Minute)
274281
updating.Status = metav1.ConditionTrue
275282
updating.Reason = string(updatestatus.NodeUpdating)
283+
updating.Message = "The node is updating"
276284
}
277285

278286
} else if isUpdated {
279287
estimate = toPointer(time.Duration(0))
280288
updating.Status = metav1.ConditionFalse
281289
updating.Reason = string(updatestatus.NodeCompleted)
290+
updating.Message = "The node is updated"
282291
} else if pool.Spec.Paused {
283292
estimate = toPointer(time.Duration(0))
284293
updating.Status = metav1.ConditionFalse
285294
updating.Reason = string(updatestatus.NodePaused)
295+
updating.Message = "The update of the node is paused"
286296
} else {
287297
updating.Status = metav1.ConditionFalse
288298
updating.Reason = string(updatestatus.NodeUpdatePending)
299+
updating.Message = "The update of the node is pending"
289300
}
290-
message = updating.Message
291301

302+
// ATM, the insight's message is set only for the interesting cases: (isUnavailable && !isUpdating) || isDegraded
303+
// Moreover, the degraded message overwrites the unavailable one.
304+
// Those cases are inherited from the "oc adm upgrade" command as the baseline for the insight's message.
305+
// https://github.com/openshift/oc/blob/0cd37758b5ebb182ea911c157256c1b812c216c5/pkg/cli/admin/upgrade/status/workerpool.go#L194
306+
// We may add more cases in the future as needed
307+
var message string
292308
if isUnavailable && !isUpdating {
293309
estimate = nil
294310
if isUpdated {

pkg/updatestatus/nodeinformer_test.go

Lines changed: 62 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,7 @@ func Test_assessNode(t *testing.T) {
273273
Status: "False",
274274
LastTransitionTime: now,
275275
Reason: "Pending",
276+
Message: "The update of the node is pending",
276277
},
277278
{
278279
Type: "Available",
@@ -283,6 +284,8 @@ func Test_assessNode(t *testing.T) {
283284
{
284285
Type: "Degraded",
285286
Status: "False",
287+
Reason: "AsExpected",
288+
Message: "The node is not degraded",
286289
LastTransitionTime: now,
287290
},
288291
},
@@ -319,16 +322,21 @@ func Test_assessNode(t *testing.T) {
319322
Type: "Updating",
320323
Status: "False",
321324
Reason: "Pending",
325+
Message: "The update of the node is pending",
322326
LastTransitionTime: now,
323327
},
324328
{
325329
Type: "Available",
326330
Status: "True",
331+
Reason: "AsExpected",
332+
Message: "The node is available",
327333
LastTransitionTime: now,
328334
},
329335
{
330336
Type: "Degraded",
331337
Status: "False",
338+
Reason: "AsExpected",
339+
Message: "The node is not degraded",
332340
LastTransitionTime: now,
333341
},
334342
},
@@ -366,16 +374,21 @@ func Test_assessNode(t *testing.T) {
366374
Type: "Updating",
367375
Status: "False",
368376
Reason: "Paused",
377+
Message: "The update of the node is paused",
369378
LastTransitionTime: now,
370379
},
371380
{
372381
Type: "Available",
373382
Status: "True",
383+
Reason: "AsExpected",
384+
Message: "The node is available",
374385
LastTransitionTime: now,
375386
},
376387
{
377388
Type: "Degraded",
378389
Status: "False",
390+
Reason: "AsExpected",
391+
Message: "The node is not degraded",
379392
LastTransitionTime: now,
380393
},
381394
},
@@ -415,16 +428,21 @@ func Test_assessNode(t *testing.T) {
415428
Type: "Updating",
416429
Status: "False",
417430
Reason: "Completed",
431+
Message: "The node is updated",
418432
LastTransitionTime: now,
419433
},
420434
{
421435
Type: "Available",
422436
Status: "True",
437+
Reason: "AsExpected",
438+
Message: "The node is available",
423439
LastTransitionTime: now,
424440
},
425441
{
426442
Type: "Degraded",
427443
Status: "False",
444+
Reason: "AsExpected",
445+
Message: "The node is not degraded",
428446
LastTransitionTime: now,
429447
},
430448
},
@@ -466,16 +484,21 @@ func Test_assessNode(t *testing.T) {
466484
Type: "Updating",
467485
Status: "True",
468486
Reason: "Updating",
487+
Message: "The node is updating",
469488
LastTransitionTime: now,
470489
},
471490
{
472491
Type: "Available",
473492
Status: "True",
493+
Reason: "AsExpected",
494+
Message: "The node is available",
474495
LastTransitionTime: now,
475496
},
476497
{
477498
Type: "Degraded",
478499
Status: "False",
500+
Reason: "AsExpected",
501+
Message: "The node is not degraded",
479502
LastTransitionTime: now,
480503
},
481504
},
@@ -517,16 +540,21 @@ func Test_assessNode(t *testing.T) {
517540
Type: "Updating",
518541
Status: "True",
519542
Reason: "Updating",
543+
Message: "The node is updating",
520544
LastTransitionTime: now,
521545
},
522546
{
523547
Type: "Available",
524548
Status: "True",
549+
Reason: "AsExpected",
550+
Message: "The node is available",
525551
LastTransitionTime: now,
526552
},
527553
{
528554
Type: "Degraded",
529555
Status: "False",
556+
Reason: "AsExpected",
557+
Message: "The node is not degraded",
530558
LastTransitionTime: now,
531559
},
532560
},
@@ -568,16 +596,21 @@ func Test_assessNode(t *testing.T) {
568596
Type: "Updating",
569597
Status: "True",
570598
Reason: "Updating",
599+
Message: "The node is updating",
571600
LastTransitionTime: now,
572601
},
573602
{
574603
Type: "Available",
575604
Status: "True",
605+
Reason: "AsExpected",
606+
Message: "The node is available",
576607
LastTransitionTime: now,
577608
},
578609
{
579610
Type: "Degraded",
580611
Status: "False",
612+
Reason: "AsExpected",
613+
Message: "The node is not degraded",
581614
LastTransitionTime: now,
582615
},
583616
},
@@ -618,16 +651,21 @@ func Test_assessNode(t *testing.T) {
618651
Type: "Updating",
619652
Status: "False",
620653
Reason: "Pending",
654+
Message: "The update of the node is pending",
621655
LastTransitionTime: now,
622656
},
623657
{
624658
Type: "Available",
625659
Status: "True",
660+
Reason: "AsExpected",
661+
Message: "The node is available",
626662
LastTransitionTime: now,
627663
},
628664
{
629665
Type: "Degraded",
630666
Status: "False",
667+
Reason: "AsExpected",
668+
Message: "The node is not degraded",
631669
LastTransitionTime: now,
632670
},
633671
},
@@ -671,16 +709,21 @@ func Test_assessNode(t *testing.T) {
671709
Type: "Updating",
672710
Status: "True",
673711
Reason: "Draining",
712+
Message: "The node is draining",
674713
LastTransitionTime: now,
675714
},
676715
{
677716
Type: "Available",
678717
Status: "True",
718+
Reason: "AsExpected",
719+
Message: "The node is available",
679720
LastTransitionTime: now,
680721
},
681722
{
682723
Type: "Degraded",
683724
Status: "False",
725+
Reason: "AsExpected",
726+
Message: "The node is not degraded",
684727
LastTransitionTime: now,
685728
},
686729
},
@@ -723,16 +766,21 @@ func Test_assessNode(t *testing.T) {
723766
Type: "Updating",
724767
Status: "True",
725768
Reason: "Rebooting",
769+
Message: "The node is rebooting",
726770
LastTransitionTime: now,
727771
},
728772
{
729773
Type: "Available",
730774
Status: "True",
775+
Reason: "AsExpected",
776+
Message: "The node is available",
731777
LastTransitionTime: now,
732778
},
733779
{
734780
Type: "Degraded",
735781
Status: "False",
782+
Reason: "AsExpected",
783+
Message: "The node is not degraded",
736784
LastTransitionTime: now,
737785
},
738786
},
@@ -768,24 +816,27 @@ func Test_assessNode(t *testing.T) {
768816
},
769817
},
770818
Scope: "WorkerPool",
771-
Message: "Node worker-1 is not ready",
819+
Message: "Node is not ready",
772820
Conditions: []metav1.Condition{
773821
{
774822
Type: "Updating",
775823
Status: "False",
776824
LastTransitionTime: now,
777825
Reason: "Pending",
826+
Message: "The update of the node is pending",
778827
},
779828
{
780829
Type: "Available",
781830
Status: "False",
782831
Reason: "Not ready",
783-
Message: "Node worker-1 is not ready",
832+
Message: "Node is not ready",
784833
LastTransitionTime: notReadyTime,
785834
},
786835
{
787836
Type: "Degraded",
788837
Status: "False",
838+
Reason: "AsExpected",
839+
Message: "The node is not degraded",
789840
LastTransitionTime: now,
790841
},
791842
},
@@ -829,10 +880,13 @@ func Test_assessNode(t *testing.T) {
829880
Status: "False",
830881
LastTransitionTime: now,
831882
Reason: "Pending",
883+
Message: "The update of the node is pending",
832884
},
833885
{
834886
Type: "Available",
835887
Status: "True",
888+
Reason: "AsExpected",
889+
Message: "The node is available",
836890
LastTransitionTime: now,
837891
},
838892
{
@@ -935,9 +989,9 @@ func Test_sync_with_node(t *testing.T) {
935989
Scope: "WorkerPool",
936990
Version: "4.1.23",
937991
Conditions: []metav1.Condition{
938-
{Type: "Updating", Status: "False", LastTransitionTime: now, Reason: "Pending"},
939-
{Type: "Available", Status: "True", LastTransitionTime: now},
940-
{Type: "Degraded", Status: "False", LastTransitionTime: now},
992+
{Type: "Updating", Status: "False", LastTransitionTime: now, Reason: "Pending", Message: "The update of the node is pending"},
993+
{Type: "Available", Status: "True", LastTransitionTime: now, Reason: "AsExpected", Message: "The node is available"},
994+
{Type: "Degraded", Status: "False", LastTransitionTime: now, Reason: "AsExpected", Message: "The node is not degraded"},
941995
},
942996
},
943997
},
@@ -978,9 +1032,9 @@ func Test_sync_with_node(t *testing.T) {
9781032
Version: "4.1.23",
9791033
EstToComplete: toPointer(10 * time.Minute),
9801034
Conditions: []metav1.Condition{
981-
{Type: "Updating", Status: "True", LastTransitionTime: now, Reason: "Updating"},
982-
{Type: "Available", Status: "True", LastTransitionTime: now},
983-
{Type: "Degraded", Status: "False", LastTransitionTime: now},
1035+
{Type: "Updating", Status: "True", LastTransitionTime: now, Reason: "Updating", Message: "The node is updating"},
1036+
{Type: "Available", Status: "True", LastTransitionTime: now, Reason: "AsExpected", Message: "The node is available"},
1037+
{Type: "Degraded", Status: "False", LastTransitionTime: now, Reason: "AsExpected", Message: "The node is not degraded"},
9841038
},
9851039
},
9861040
},

0 commit comments

Comments
 (0)