diff --git a/pkg/cli/admin/upgrade/recommend/examples/5.0.0-includes-graph-and-alert-risks.version-5.0.0-ec.5-output b/pkg/cli/admin/upgrade/recommend/examples/5.0.0-includes-graph-and-alert-risks.version-5.0.0-ec.5-output index de30eee16f..8d7cce9608 100644 --- a/pkg/cli/admin/upgrade/recommend/examples/5.0.0-includes-graph-and-alert-risks.version-5.0.0-ec.5-output +++ b/pkg/cli/admin/upgrade/recommend/examples/5.0.0-includes-graph-and-alert-risks.version-5.0.0-ec.5-output @@ -11,5 +11,5 @@ Message: This is a synthetic risk A that always applies for testing purposes htt Test alert for updates. https://github.com/openshift/runbooks/tree/master/alerts?runbook=notfound -error: There are issues that apply to this cluster and have not been accepted. `oc adm upgrade accept` can be used to accept them: SyntheticRiskA,SyntheticRiskB,SyntheticRiskC,TestAlert +error: There are issues that apply to this cluster and have not been accepted. `oc adm upgrade accept` can be used to accept them: SyntheticRiskA,SyntheticRiskB,TestAlert diff --git a/pkg/cli/admin/upgrade/recommend/recommend.go b/pkg/cli/admin/upgrade/recommend/recommend.go index a852ed33a2..329e470be7 100644 --- a/pkg/cli/admin/upgrade/recommend/recommend.go +++ b/pkg/cli/admin/upgrade/recommend/recommend.go @@ -162,12 +162,20 @@ func (o *options) Run(ctx context.Context) error { return fmt.Errorf("`oc adm upgrade accept` is used to accept when the feature gate %s is enabled", features.FeatureGateClusterUpdateAcceptRisks) } - if cvoChecking { - for _, risk := range cv.Status.ConditionalUpdateRisks { - for _, condition := range risk.Conditions { - if condition.Type == "Applies" && condition.Status != metav1.ConditionFalse { - issues.Insert(risk.Name) + if cvoChecking && o.version != nil { + v := o.version.String() + for _, cu := range cv.Status.ConditionalUpdates { + if cu.Release.Version == v { + for _, riskName := range cu.RiskNames { + if risk := findRiskByName(cv.Status.ConditionalUpdateRisks, riskName); risk != nil { + for _, condition := range risk.Conditions { + if condition.Type == "Applies" && condition.Status != metav1.ConditionFalse { + issues.Insert(risk.Name) + } + } + } } + break } } if cv.Spec.DesiredUpdate != nil { @@ -450,6 +458,15 @@ func (o *options) Run(ctx context.Context) error { return nil } +func findRiskByName(risks []configv1.ConditionalUpdateRisk, name string) *configv1.ConditionalUpdateRisk { + for _, risk := range risks { + if risk.Name == name { + return &risk + } + } + return nil +} + func notRecommendedCondition(update configv1.ConditionalUpdate) *metav1.Condition { if len(update.Risks) == 0 { return nil