Skip to content

Commit 0a756ff

Browse files
Fix machine discovery in test suite
Signed-off-by: Danil Grigorev <[email protected]>
1 parent 1ad956d commit 0a756ff

File tree

1 file changed

+68
-1
lines changed

1 file changed

+68
-1
lines changed

test/e2e/helpers.go

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,15 @@ import (
2626
"math/rand"
2727
"net"
2828
"os/exec"
29+
"sort"
2930
"strings"
3031
"time"
3132

3233
. "github.com/onsi/ginkgo/v2"
3334
. "github.com/onsi/gomega"
3435
"github.com/pkg/errors"
3536
v1 "k8s.io/api/apps/v1"
37+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3638
"k8s.io/apimachinery/pkg/types"
3739
"k8s.io/klog/v2"
3840

@@ -140,7 +142,7 @@ func ApplyClusterTemplateAndWait(ctx context.Context, input ApplyClusterTemplate
140142
input.WaitForControlPlaneInitialized(ctx, input, result)
141143

142144
Byf("Waiting for the machine deployments to be provisioned")
143-
result.MachineDeployments = framework.DiscoveryAndWaitForMachineDeployments(ctx, framework.DiscoveryAndWaitForMachineDeploymentsInput{
145+
result.MachineDeployments = DiscoveryAndWaitForMachineDeployments(ctx, framework.DiscoveryAndWaitForMachineDeploymentsInput{
144146
Lister: input.ClusterProxy.GetClient(),
145147
Cluster: result.Cluster,
146148
}, input.WaitForMachineDeployments...)
@@ -151,6 +153,71 @@ func ApplyClusterTemplateAndWait(ctx context.Context, input ApplyClusterTemplate
151153
}
152154
}
153155

156+
// DiscoveryAndWaitForMachineDeployments discovers the MachineDeployments existing in a cluster and waits for them to be ready (all the machine provisioned).
157+
func DiscoveryAndWaitForMachineDeployments(ctx context.Context, input framework.DiscoveryAndWaitForMachineDeploymentsInput, intervals ...interface{}) []*clusterv1.MachineDeployment {
158+
Expect(ctx).NotTo(BeNil(), "ctx is required for DiscoveryAndWaitForMachineDeployments")
159+
Expect(input.Lister).ToNot(BeNil(), "Invalid argument. input.Lister can't be nil when calling DiscoveryAndWaitForMachineDeployments")
160+
Expect(input.Cluster).ToNot(BeNil(), "Invalid argument. input.Cluster can't be nil when calling DiscoveryAndWaitForMachineDeployments")
161+
162+
machineDeployments := framework.GetMachineDeploymentsByCluster(ctx, framework.GetMachineDeploymentsByClusterInput{
163+
Lister: input.Lister,
164+
ClusterName: input.Cluster.Name,
165+
Namespace: input.Cluster.Namespace,
166+
})
167+
for _, deployment := range machineDeployments {
168+
WaitForMachineDeploymentNodesToExist(ctx, framework.WaitForMachineDeploymentNodesToExistInput{
169+
Lister: input.Lister,
170+
Cluster: input.Cluster,
171+
MachineDeployment: deployment,
172+
}, intervals...)
173+
174+
framework.AssertMachineDeploymentFailureDomains(ctx, framework.AssertMachineDeploymentFailureDomainsInput{
175+
Lister: input.Lister,
176+
Cluster: input.Cluster,
177+
MachineDeployment: deployment,
178+
})
179+
}
180+
return machineDeployments
181+
}
182+
183+
// WaitForMachineDeploymentNodesToExist waits until all nodes associated with a machine deployment exist.
184+
func WaitForMachineDeploymentNodesToExist(ctx context.Context, input framework.WaitForMachineDeploymentNodesToExistInput, intervals ...interface{}) {
185+
Expect(ctx).NotTo(BeNil(), "ctx is required for WaitForMachineDeploymentNodesToExist")
186+
Expect(input.Lister).ToNot(BeNil(), "Invalid argument. input.Lister can't be nil when calling WaitForMachineDeploymentNodesToExist")
187+
Expect(input.MachineDeployment).ToNot(BeNil(), "Invalid argument. input.MachineDeployment can't be nil when calling WaitForMachineDeploymentNodesToExist")
188+
189+
By("Waiting for the workload nodes to exist")
190+
Eventually(func(g Gomega) {
191+
selectorMap, err := metav1.LabelSelectorAsMap(&input.MachineDeployment.Spec.Selector)
192+
g.Expect(err).ToNot(HaveOccurred())
193+
ms := &clusterv1.MachineSetList{}
194+
err = input.Lister.List(ctx, ms, client.InNamespace(input.Cluster.Namespace), client.MatchingLabels(selectorMap))
195+
g.Expect(err).ToNot(HaveOccurred())
196+
g.Expect(ms.Items).NotTo(BeEmpty())
197+
machineSet := ms.Items[0]
198+
sort.Slice(ms.Items, func(i, j int) bool {
199+
return ms.Items[j].CreationTimestamp.After(ms.Items[i].CreationTimestamp.Time)
200+
})
201+
for _, ms := range ms.Items {
202+
if *machineSet.Spec.Replicas == *input.MachineDeployment.Spec.Replicas {
203+
machineSet = ms
204+
}
205+
}
206+
selectorMap, err = metav1.LabelSelectorAsMap(&machineSet.Spec.Selector)
207+
g.Expect(err).ToNot(HaveOccurred())
208+
machines := &clusterv1.MachineList{}
209+
err = input.Lister.List(ctx, machines, client.InNamespace(machineSet.Namespace), client.MatchingLabels(selectorMap))
210+
g.Expect(err).ToNot(HaveOccurred())
211+
count := 0
212+
for _, machine := range machines.Items {
213+
if machine.Status.NodeRef != nil {
214+
count++
215+
}
216+
}
217+
g.Expect(count).To(Equal(int(*input.MachineDeployment.Spec.Replicas)))
218+
}, intervals...).Should(Succeed(), "Timed out waiting for %d nodes to be created for MachineDeployment %s", int(*input.MachineDeployment.Spec.Replicas), klog.KObj(input.MachineDeployment))
219+
}
220+
154221
func SetControllerVersionAndWait(ctx context.Context, proxy framework.ClusterProxy, version string) {
155222
cp := &v1.Deployment{}
156223
Expect(proxy.GetClient().Get(ctx, types.NamespacedName{

0 commit comments

Comments
 (0)