@@ -529,10 +529,18 @@ type AlertGetter interface {
529529}
530530
531531func (u * availableUpdates ) evaluateAlertRisks (ctx context.Context ) error {
532+ if u == nil || u .AlertGetter == nil {
533+ u .AlertRisks = nil
534+ return nil
535+ }
532536 alerts , err := u .AlertGetter .Get (ctx )
533537 if err != nil {
534538 return fmt .Errorf ("failed to get alerts: %w" , err )
535539 }
540+ if alerts == nil {
541+ u .AlertRisks = nil
542+ return nil
543+ }
536544 u .AlertRisks = alertsToRisks (alerts .Data .Alerts )
537545 return nil
538546}
@@ -583,7 +591,7 @@ func alertsToRisks(alerts []alert.Alert) []configv1.ConditionalUpdateRisk {
583591 if alertName == "PodDisruptionBudgetLimit" {
584592 details = fmt .Sprintf ("Namespace=%s, PodDisruptionBudget=%s. %s" , alert .Labels .Namespace , alert .Labels .PodDisruptionBudget , details )
585593 }
586- addCondition (risks , alertName , summary , alertURL , alertPromQL , metav1.Condition {
594+ risks [ alertName ] = getRisk (risks , alertName , summary , alertURL , alertPromQL , metav1.Condition {
587595 Type : internal .ConditionalUpdateRiskConditionTypeApplies ,
588596 Status : metav1 .ConditionTrue ,
589597 Reason : fmt .Sprintf ("Alert:%s" , alert .State ),
@@ -595,7 +603,7 @@ func alertsToRisks(alerts []alert.Alert) []configv1.ConditionalUpdateRisk {
595603
596604 if alertName == "PodDisruptionBudgetAtLimit" {
597605 details = fmt .Sprintf ("Namespace=%s, PodDisruptionBudget=%s. %s" , alert .Labels .Namespace , alert .Labels .PodDisruptionBudget , details )
598- addCondition (risks , alertName , summary , alertURL , alertPromQL , metav1.Condition {
606+ risks [ alertName ] = getRisk (risks , alertName , summary , alertURL , alertPromQL , metav1.Condition {
599607 Type : internal .ConditionalUpdateRiskConditionTypeApplies ,
600608 Status : metav1 .ConditionTrue ,
601609 Reason : internal .AlertConditionReason (alert .State ),
@@ -606,7 +614,7 @@ func alertsToRisks(alerts []alert.Alert) []configv1.ConditionalUpdateRisk {
606614 }
607615
608616 if alertName == "KubeContainerWaiting" {
609- addCondition (risks , alertName , summary , alertURL , alertPromQL , metav1.Condition {
617+ risks [ alertName ] = getRisk (risks , alertName , summary , alertURL , alertPromQL , metav1.Condition {
610618 Type : internal .ConditionalUpdateRiskConditionTypeApplies ,
611619 Status : metav1 .ConditionTrue ,
612620 Reason : internal .AlertConditionReason (alert .State ),
@@ -617,7 +625,7 @@ func alertsToRisks(alerts []alert.Alert) []configv1.ConditionalUpdateRisk {
617625 }
618626
619627 if alertName == "KubeNodeNotReady" || alertName == "KubeNodeReadinessFlapping" || alertName == "KubeNodeUnreachable" {
620- addCondition (risks , alertName , summary , alertURL , alertPromQL , metav1.Condition {
628+ risks [ alertName ] = getRisk (risks , alertName , summary , alertURL , alertPromQL , metav1.Condition {
621629 Type : internal .ConditionalUpdateRiskConditionTypeApplies ,
622630 Status : metav1 .ConditionTrue ,
623631 Reason : internal .AlertConditionReason (alert .State ),
@@ -644,10 +652,10 @@ func alertsToRisks(alerts []alert.Alert) []configv1.ConditionalUpdateRisk {
644652 return ret
645653}
646654
647- func addCondition (risks map [string ]configv1.ConditionalUpdateRisk , riskName , message , url , promQL string , condition metav1.Condition ) {
655+ func getRisk (risks map [string ]configv1.ConditionalUpdateRisk , riskName , message , url , promQL string , condition metav1.Condition ) configv1. ConditionalUpdateRisk {
648656 risk , ok := risks [riskName ]
649657 if ! ok {
650- risks [ riskName ] = configv1.ConditionalUpdateRisk {
658+ return configv1.ConditionalUpdateRisk {
651659 Name : riskName ,
652660 Message : message ,
653661 URL : url ,
@@ -661,14 +669,17 @@ func addCondition(risks map[string]configv1.ConditionalUpdateRisk, riskName, mes
661669 },
662670 Conditions : []metav1.Condition {condition },
663671 }
664- return
665672 }
666673
667- risk .Conditions [0 ].Message = fmt .Sprintf ("%s; %s" , risk .Conditions [0 ].Message , condition .Message )
668- if risk .Conditions [0 ].LastTransitionTime .After (condition .LastTransitionTime .Time ) {
669- risk .Conditions [0 ].LastTransitionTime = condition .LastTransitionTime
674+ if c := meta .FindStatusCondition (risk .Conditions , condition .Type ); c != nil {
675+ c .Message = fmt .Sprintf ("%s; %s" , c .Message , condition .Message )
676+ if c .LastTransitionTime .After (condition .LastTransitionTime .Time ) {
677+ c .LastTransitionTime = condition .LastTransitionTime
678+ }
679+ meta .SetStatusCondition (& risk .Conditions , * c )
670680 }
671681
682+ return risk
672683}
673684
674685func (u * availableUpdates ) evaluateConditionalUpdates (ctx context.Context ) {
0 commit comments