Skip to content

Commit 25098ff

Browse files
MinReadySeconds for machinepools
1 parent 36e9aba commit 25098ff

File tree

3 files changed

+25
-8
lines changed

3 files changed

+25
-8
lines changed

exp/internal/controllers/machinepool_controller_noderef.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,12 @@ import (
2323

2424
"github.com/pkg/errors"
2525
corev1 "k8s.io/api/core/v1"
26+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2627
ctrl "sigs.k8s.io/controller-runtime"
2728
"sigs.k8s.io/controller-runtime/pkg/client"
2829

2930
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
31+
"sigs.k8s.io/cluster-api/controllers/noderefutil"
3032
expv1 "sigs.k8s.io/cluster-api/exp/api/v1beta1"
3133
"sigs.k8s.io/cluster-api/internal/util/taints"
3234
"sigs.k8s.io/cluster-api/util"
@@ -81,7 +83,7 @@ func (r *MachinePoolReconciler) reconcileNodeRefs(ctx context.Context, cluster *
8183
}
8284

8385
// Get the Node references.
84-
nodeRefsResult, err := r.getNodeReferences(ctx, clusterClient, mp.Spec.ProviderIDList)
86+
nodeRefsResult, err := r.getNodeReferences(ctx, clusterClient, mp.Spec.ProviderIDList, mp.Spec.MinReadySeconds)
8587
if err != nil {
8688
if err == errNoAvailableNodes {
8789
log.Info("Cannot assign NodeRefs to MachinePool, no matching Nodes")
@@ -152,7 +154,7 @@ func (r *MachinePoolReconciler) deleteRetiredNodes(ctx context.Context, c client
152154
return nil
153155
}
154156

155-
func (r *MachinePoolReconciler) getNodeReferences(ctx context.Context, c client.Client, providerIDList []string) (getNodeReferencesResult, error) {
157+
func (r *MachinePoolReconciler) getNodeReferences(ctx context.Context, c client.Client, providerIDList []string, minReadySeconds *int32) (getNodeReferencesResult, error) {
156158
log := ctrl.LoggerFrom(ctx, "providerIDList", len(providerIDList))
157159

158160
var ready, available int
@@ -184,9 +186,11 @@ func (r *MachinePoolReconciler) getNodeReferences(ctx context.Context, c client.
184186
continue
185187
}
186188
if node, ok := nodeRefsMap[providerID]; ok {
187-
available++
188189
if nodeIsReady(&node) {
189190
ready++
191+
if noderefutil.IsNodeAvailable(&node, *minReadySeconds, metav1.Now()) {
192+
available++
193+
}
190194
}
191195
nodeRefs = append(nodeRefs, corev1.ObjectReference{
192196
Kind: node.Kind,

exp/internal/controllers/machinepool_controller_noderef_test.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
corev1 "k8s.io/api/core/v1"
2424
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2525
"k8s.io/client-go/tools/record"
26+
"k8s.io/utils/ptr"
2627
"sigs.k8s.io/controller-runtime/pkg/client"
2728
"sigs.k8s.io/controller-runtime/pkg/client/fake"
2829

@@ -90,10 +91,11 @@ func TestMachinePoolGetNodeReference(t *testing.T) {
9091
client := fake.NewClientBuilder().WithObjects(nodeList...).Build()
9192

9293
testCases := []struct {
93-
name string
94-
providerIDList []string
95-
expected *getNodeReferencesResult
96-
err error
94+
name string
95+
providerIDList []string
96+
expected *getNodeReferencesResult
97+
err error
98+
minReadySeconds int
9799
}{
98100
{
99101
name: "valid provider id, valid aws node",
@@ -175,13 +177,23 @@ func TestMachinePoolGetNodeReference(t *testing.T) {
175177
},
176178
},
177179
},
180+
{
181+
name: "valid provider id, valid aws node, with minReadySeconds",
182+
providerIDList: []string{"aws://us-east-1/id-node-1"},
183+
expected: &getNodeReferencesResult{
184+
references: []corev1.ObjectReference{{Name: "node-1"}},
185+
available: 0,
186+
ready: 1,
187+
},
188+
minReadySeconds: 20,
189+
},
178190
}
179191

180192
for _, test := range testCases {
181193
t.Run(test.name, func(t *testing.T) {
182194
g := NewWithT(t)
183195

184-
result, err := r.getNodeReferences(ctx, client, test.providerIDList)
196+
result, err := r.getNodeReferences(ctx, client, test.providerIDList, ptr.To[int32](int32(test.minReadySeconds)))
185197
if test.err == nil {
186198
g.Expect(err).ToNot(HaveOccurred())
187199
} else {

exp/internal/controllers/machinepool_controller_phases_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1455,6 +1455,7 @@ func TestReconcileMachinePoolScaleToFromZero(t *testing.T) {
14551455
},
14561456
},
14571457
},
1458+
MinReadySeconds: ptr.To[int32](0),
14581459
},
14591460
Status: expv1.MachinePoolStatus{},
14601461
}

0 commit comments

Comments
 (0)