Skip to content

Commit efc818f

Browse files
authored
Merge pull request #3277 from fabriziopandini/cleanup-machinesNeedingRollout
🌱 Cleanup machinesNeedingRollout in KCP
2 parents e81b7d4 + 40e8a9a commit efc818f

File tree

3 files changed

+33
-29
lines changed

3 files changed

+33
-29
lines changed

controlplane/kubeadm/controllers/helpers.go

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -259,20 +259,14 @@ func (r *KubeadmControlPlaneReconciler) generateMachine(ctx context.Context, kcp
259259

260260
// machinesNeedingRollout return a list of machines that need to be rolled out.
261261
func (r *KubeadmControlPlaneReconciler) machinesNeedingRollout(ctx context.Context, c *internal.ControlPlane) internal.FilterableMachineCollection {
262-
now := metav1.Now()
263-
264262
// Ignore machines to be deleted.
265263
machines := c.Machines.Filter(machinefilters.Not(machinefilters.HasDeletionTimestamp))
266264

267-
// Return machines if their creation timestamp is older than the KCP.Spec.UpgradeAfter, or any machine with an outdated configuration.
268-
if c.KCP.Spec.UpgradeAfter != nil && c.KCP.Spec.UpgradeAfter.Before(&now) {
269-
return machines.Filter(machinefilters.Or(
270-
// Machines that are old.
271-
machinefilters.OlderThan(c.KCP.Spec.UpgradeAfter),
272-
// Machines that do not match with KCP config.
273-
machinefilters.Not(machinefilters.MatchesKCPConfiguration(ctx, r.Client, *c.KCP, *c.Cluster)),
274-
))
275-
}
276-
277-
return machines.Filter(machinefilters.Not(machinefilters.MatchesKCPConfiguration(ctx, r.Client, *c.KCP, *c.Cluster)))
265+
// Return machines if they are scheduled for rollout or if with an outdated configuration.
266+
return machines.AnyFilter(
267+
// Machines that are scheduled for rollout (KCP.Spec.UpgradeAfter set, the UpgradeAfter deadline is expired, and the machine was created before the deadline).
268+
machinefilters.ShouldRolloutAfter(c.KCP.Spec.UpgradeAfter),
269+
// Machines that do not match with KCP config.
270+
machinefilters.Not(machinefilters.MatchesKCPConfiguration(ctx, r.Client, *c.KCP, *c.Cluster)),
271+
)
278272
}

controlplane/kubeadm/internal/machinefilters/machine_filters.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,13 +166,17 @@ func IsReady() Func {
166166
}
167167
}
168168

169-
// OlderThan returns a filter to find all machines
170-
// that have a CreationTimestamp earlier than the given time.
171-
func OlderThan(t *metav1.Time) Func {
169+
// ShouldRolloutAfter returns a filter to find all machines
170+
// that should rollout after the given time.
171+
func ShouldRolloutAfter(t *metav1.Time) Func {
172+
now := metav1.Now()
172173
return func(machine *clusterv1.Machine) bool {
173174
if machine == nil {
174175
return false
175176
}
177+
if t == nil || !t.Before(&now) {
178+
return false
179+
}
176180
return machine.CreationTimestamp.Before(t)
177181
}
178182
}

controlplane/kubeadm/internal/machinefilters/machine_filters_test.go

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -118,27 +118,33 @@ func TestMatchesConfigurationHash(t *testing.T) {
118118
})
119119
}
120120

121-
func TestOlderThan(t *testing.T) {
122-
t.Run("machine with creation timestamp older than given returns true", func(t *testing.T) {
121+
func TestShouldRolloutAfter(t *testing.T) {
122+
t.Run("if upgradeAfter is nil, return false", func(t *testing.T) {
123123
g := NewWithT(t)
124124
m := &clusterv1.Machine{}
125-
m.SetCreationTimestamp(metav1.NewTime(time.Now().Add(-1 * time.Hour)))
126-
now := metav1.Now()
127-
g.Expect(machinefilters.OlderThan(&now)(m)).To(BeTrue())
125+
m.SetCreationTimestamp(metav1.NewTime(time.Now().Add(-2 * time.Hour)))
126+
g.Expect(machinefilters.ShouldRolloutAfter(nil)(m)).To(BeFalse())
128127
})
129-
t.Run("machine with creation timestamp equal to given returns false", func(t *testing.T) {
128+
t.Run("if upgradeAfter is in the future, return false", func(t *testing.T) {
130129
g := NewWithT(t)
131130
m := &clusterv1.Machine{}
132-
now := metav1.Now()
133-
m.SetCreationTimestamp(now)
134-
g.Expect(machinefilters.OlderThan(&now)(m)).To(BeFalse())
131+
m.SetCreationTimestamp(metav1.NewTime(time.Now().Add(-2 * time.Hour)))
132+
upgradeAfter := metav1.NewTime(time.Now().Add(+1 * time.Hour)) // upgrade after in the future
133+
g.Expect(machinefilters.ShouldRolloutAfter(&upgradeAfter)(m)).To(BeFalse())
135134
})
136-
t.Run("machine with creation timestamp after given returns false", func(t *testing.T) {
135+
t.Run("if upgradeAfter is in the past and the machine was created before upgradeAfter, return true", func(t *testing.T) {
137136
g := NewWithT(t)
138137
m := &clusterv1.Machine{}
139-
m.SetCreationTimestamp(metav1.NewTime(time.Now().Add(+1 * time.Hour)))
140-
now := metav1.Now()
141-
g.Expect(machinefilters.OlderThan(&now)(m)).To(BeFalse())
138+
m.SetCreationTimestamp(metav1.NewTime(time.Now().Add(-2 * time.Hour))) // machine was created before upgradeAfter
139+
upgradeAfter := metav1.NewTime(time.Now().Add(-1 * time.Hour)) // upgrade after in the past
140+
g.Expect(machinefilters.ShouldRolloutAfter(&upgradeAfter)(m)).To(BeTrue())
141+
})
142+
t.Run("if upgradeAfter is in the past and the machine was created after upgradeAfter, return false", func(t *testing.T) {
143+
g := NewWithT(t)
144+
m := &clusterv1.Machine{}
145+
m.SetCreationTimestamp(metav1.NewTime(time.Now().Add(+1 * time.Hour))) // machine was created after upgradeAfter
146+
upgradeAfter := metav1.NewTime(time.Now().Add(-1 * time.Hour)) // upgrade after in the past
147+
g.Expect(machinefilters.ShouldRolloutAfter(&upgradeAfter)(m)).To(BeFalse())
142148
})
143149
}
144150

0 commit comments

Comments
 (0)