@@ -238,22 +238,21 @@ func (r *Reconciler) reconcileTopologyReconciledCondition(s *scope.Scope, cluste
238238 }
239239
240240 // If MachineDeployments are upgrading surface it, if MachineDeployments are pending upgrades then surface the upgrade plans.
241- if s .UpgradeTracker .MachineDeployments .IsAnyUpgrading () {
242- fmt .Fprintf (msgBuilder , "\n * %s upgrading to version %s" , nameList ("MachineDeployment" , "MachineDeployments" , s .UpgradeTracker .MachineDeployments .UpgradingNames ()), * cpVersion )
241+ upgradingMachineDeploymentNames , pendingMachineDeploymentNames , deferredMachineDeploymentNames := dedupNames (s .UpgradeTracker .MachineDeployments )
242+ if len (upgradingMachineDeploymentNames ) > 0 {
243+ fmt .Fprintf (msgBuilder , "\n * %s upgrading to version %s" , nameList ("MachineDeployment" , "MachineDeployments" , upgradingMachineDeploymentNames ), * cpVersion )
243244 if len (s .UpgradeTracker .ControlPlane .UpgradePlan ) > 0 {
244245 fmt .Fprintf (msgBuilder , " (%s pending)" , strings .Join (s .UpgradeTracker .MachineDeployments .UpgradePlan , ", " ))
245246 }
246247 }
247248
248- pendingMachineDeploymentNames := sets.Set [string ]{}.Insert (s .UpgradeTracker .MachineDeployments .PendingUpgradeNames ()... )
249- pendingMachineDeploymentNames = pendingMachineDeploymentNames .Difference (sets.Set [string ]{}.Insert (s .UpgradeTracker .MachineDeployments .DeferredUpgradeNames ()... ))
250249 if len (pendingMachineDeploymentNames ) > 0 && len (s .UpgradeTracker .MachineDeployments .UpgradePlan ) > 0 {
251- fmt .Fprintf (msgBuilder , "\n * %s pending upgrade to version %s" , nameList ("MachineDeployment" , "MachineDeployments" , pendingMachineDeploymentNames . UnsortedList () ), strings .Join (s .UpgradeTracker .MachineDeployments .UpgradePlan , ", " ))
250+ fmt .Fprintf (msgBuilder , "\n * %s pending upgrade to version %s" , nameList ("MachineDeployment" , "MachineDeployments" , pendingMachineDeploymentNames ), strings .Join (s .UpgradeTracker .MachineDeployments .UpgradePlan , ", " ))
252251 }
253252
254253 // If MachineDeployments has been deferred or put on hold, surface it.
255- if s . UpgradeTracker . MachineDeployments . IsAnyUpgradeDeferred () {
256- fmt .Fprintf (msgBuilder , "\n * %s upgrade to version %s deferred using topology.cluster.x-k8s.io/defer-upgrade or hold-upgrade-sequence annotations" , nameList ("MachineDeployment" , "MachineDeployments" , s . UpgradeTracker . MachineDeployments . DeferredUpgradeNames () ), * cpVersion )
254+ if len ( deferredMachineDeploymentNames ) > 0 {
255+ fmt .Fprintf (msgBuilder , "\n * %s upgrade to version %s deferred using topology.cluster.x-k8s.io/defer-upgrade or hold-upgrade-sequence annotations" , nameList ("MachineDeployment" , "MachineDeployments" , deferredMachineDeploymentNames ), * cpVersion )
257256 // If Deferred upgrades are blocking an upgrade, surface it.
258257 // Note: Hook blocking takes the precedence on this signal.
259258 if ! s .HookResponseTracker .IsAnyBlocking () &&
@@ -270,22 +269,21 @@ func (r *Reconciler) reconcileTopologyReconciledCondition(s *scope.Scope, cluste
270269 }
271270
272271 // If MachinePools are upgrading surface it, if MachinePools are pending upgrades then surface the upgrade plans.
273- if s .UpgradeTracker .MachinePools .IsAnyUpgrading () {
274- fmt .Fprintf (msgBuilder , "\n * %s upgrading to version %s" , nameList ("MachinePool" , "MachinePools" , s .UpgradeTracker .MachinePools .UpgradingNames ()), * cpVersion )
272+ upgradingMachinePoolNames , pendingMachinePoolNames , deferredMachinePoolNames := dedupNames (s .UpgradeTracker .MachinePools )
273+ if len (upgradingMachinePoolNames ) > 0 {
274+ fmt .Fprintf (msgBuilder , "\n * %s upgrading to version %s" , nameList ("MachinePool" , "MachinePools" , upgradingMachinePoolNames ), * cpVersion )
275275 if len (s .UpgradeTracker .ControlPlane .UpgradePlan ) > 0 {
276276 fmt .Fprintf (msgBuilder , " (%s pending)" , strings .Join (s .UpgradeTracker .MachinePools .UpgradePlan , ", " ))
277277 }
278278 }
279279
280- pendingMachinePoolNames := sets.Set [string ]{}.Insert (s .UpgradeTracker .MachinePools .PendingUpgradeNames ()... )
281- pendingMachinePoolNames = pendingMachinePoolNames .Difference (sets.Set [string ]{}.Insert (s .UpgradeTracker .MachinePools .DeferredUpgradeNames ()... ))
282280 if len (pendingMachinePoolNames ) > 0 && len (s .UpgradeTracker .MachinePools .UpgradePlan ) > 0 {
283- fmt .Fprintf (msgBuilder , "\n * %s pending upgrade to version %s" , nameList ("MachinePool" , "MachinePools" , pendingMachinePoolNames . UnsortedList () ), strings .Join (s .UpgradeTracker .MachinePools .UpgradePlan , ", " ))
281+ fmt .Fprintf (msgBuilder , "\n * %s pending upgrade to version %s" , nameList ("MachinePool" , "MachinePools" , pendingMachinePoolNames ), strings .Join (s .UpgradeTracker .MachinePools .UpgradePlan , ", " ))
284282 }
285283
286284 // If MachinePools has been deferred or put on hold, surface it.
287- if s . UpgradeTracker . MachinePools . IsAnyUpgradeDeferred () {
288- fmt .Fprintf (msgBuilder , "\n * %s upgrade to version %s deferred using topology.cluster.x-k8s.io/defer-upgrade or hold-upgrade-sequence annotations" , nameList ("MachinePool" , "MachinePools" , s . UpgradeTracker . MachinePools . DeferredUpgradeNames () ), * cpVersion )
285+ if len ( deferredMachinePoolNames ) > 0 {
286+ fmt .Fprintf (msgBuilder , "\n * %s upgrade to version %s deferred using topology.cluster.x-k8s.io/defer-upgrade or hold-upgrade-sequence annotations" , nameList ("MachinePool" , "MachinePools" , deferredMachinePoolNames ), * cpVersion )
289287 // If Deferred upgrades are blocking an upgrade, surface it.
290288 // Note: Hook blocking takes the precedence on this signal.
291289 if ! s .HookResponseTracker .IsAnyBlocking () &&
@@ -333,6 +331,17 @@ func (r *Reconciler) reconcileTopologyReconciledCondition(s *scope.Scope, cluste
333331 return nil
334332}
335333
334+ // dedupNames take care of names that might exist in multiple lists.
335+ func dedupNames (t scope.WorkerUpgradeTracker ) ([]string , []string , []string ) {
336+ // upgrading names are preserved
337+ upgradingSet := sets.Set [string ]{}.Insert (t .UpgradingNames ()... )
338+ // upgrading names are removed from deferred names (give precedence to the fact that it is upgrading now)
339+ deferredSet := sets.Set [string ]{}.Insert (t .DeferredUpgradeNames ()... ).Difference (upgradingSet )
340+ // upgrading and deferred names are removed from pending names (it is pending if not upgrading or deferred)
341+ pendingSet := sets.Set [string ]{}.Insert (t .PendingUpgradeNames ()... ).Difference (upgradingSet ).Difference (deferredSet )
342+ return upgradingSet .UnsortedList (), pendingSet .UnsortedList (), deferredSet .UnsortedList ()
343+ }
344+
336345// computeNameList computes list of names from the given list to be shown in conditions.
337346// It shortens the list to at most 5 names and adds an ellipsis at the end if the list
338347// has more than 3 elements.
0 commit comments