@@ -4,14 +4,14 @@ import (
44 "context"
55 "errors"
66 "fmt"
7- "strings"
87 "time"
98
109 . "github.com/onsi/ginkgo/v2"
1110 . "github.com/onsi/gomega"
1211 "github.com/vmware/govmomi/object"
1312 "github.com/vmware/govmomi/vim25/types"
1413 corev1 "k8s.io/api/core/v1"
14+ apierrors "k8s.io/apimachinery/pkg/api/errors"
1515 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1616 k8stypes "k8s.io/apimachinery/pkg/types"
1717 "k8s.io/klog/v2"
@@ -20,30 +20,47 @@ import (
2020 ctrlclient "sigs.k8s.io/controller-runtime/pkg/client"
2121)
2222
23- const machineNamespace = "default"
23+ const (
24+ machineNamespace = "default"
25+ ControlPlaneNodeLabel = "node-role.kubernetes.io/control-plane"
26+ )
2427
25- // getWorkerNode retrieves the worker node object for the E2E testing using workload cluster's clientset
28+ // getWorkerNode retrieves the first worker node object for the E2E testing using workload cluster's clientset
29+ // Only control plane Node has ControlPlaneNodeLabel.
2630func getWorkerNode () (* corev1.Node , error ) {
2731 nodes , err := workloadClientset .CoreV1 ().Nodes ().List (ctx , metav1.ListOptions {})
2832 if err != nil {
2933 return nil , err
3034 }
31- return getFirstWorkerNodeFromList (nodes )
35+
36+ for _ , node := range nodes .Items {
37+ if _ , ok := node .GetLabels ()[ControlPlaneNodeLabel ]; ! ok {
38+ // get the first worker node
39+ return & node , nil
40+ }
41+
42+ }
43+ return nil , errors .New ("worker node not found" )
3244}
3345
34- // getWorkerNode retrieves the CAPV machine object with name from the boostrap cluster
46+ // getWorkerMachine retrieves the CAPI machine object with name from the boostrap cluster
3547func getWorkerMachine (name string ) (* v1beta1.Machine , error ) {
36- machine := & v1beta1.Machine {}
37- if err := proxy .GetClient ().Get (ctx , k8stypes.NamespacedName {
38- Name : name ,
39- Namespace : machineNamespace ,
40- }, machine ); err != nil {
41- return nil , err
48+ machineList := & v1beta1.MachineList {}
49+ err := proxy .GetClient ().List (ctx , machineList )
50+ if err != nil {
51+ return nil , errors .New ("failed to list Machines" )
4252 }
43- return machine , err
53+
54+ for _ , machine := range machineList .Items {
55+ if machine .Status .NodeRef .Name == name {
56+ return & machine , nil
57+ }
58+ }
59+
60+ return nil , errors .New ("machine not found" )
4461}
4562
46- // deleteWorkerMachine deletes the CAPV machine object with name from the boostrap cluster
63+ // deleteWorkerMachine deletes the CAPI machine object with name from the boostrap cluster
4764func deleteWorkerMachine (name string ) error {
4865 machine := & v1beta1.Machine {
4966 ObjectMeta : metav1.ObjectMeta {
@@ -54,17 +71,6 @@ func deleteWorkerMachine(name string) error {
5471 return proxy .GetClient ().Delete (ctx , machine )
5572}
5673
57- // getFirstWorkerNodeFromList searches the first worker node that forms the cluster.
58- // We assume all the name of worker node contains substring `-md-`
59- func getFirstWorkerNodeFromList (nodes * corev1.NodeList ) (* corev1.Node , error ) {
60- for _ , node := range nodes .Items {
61- if strings .Contains (node .Name , "-md-" ) {
62- return & node , nil
63- }
64- }
65- return nil , errors .New ("worker node not found" )
66- }
67-
6874// getExternalIPFromNode returns the external IP from Node.status.addresses, given a node object
6975func getExternalIPFromNode (node * corev1.Node ) (string , error ) {
7076 addresses := node .Status .Addresses
@@ -306,14 +312,14 @@ var _ = Describe("Restarting, recreating and deleting VMs", func() {
306312 providerID := getProviderIDFromNode (workerNode )
307313
308314 By ("Delete machine object" , func () {
309- err := deleteWorkerMachine (workerNode .Name )
315+ err := deleteWorkerMachine (workerMachine .Name )
310316 Expect (err ).To (BeNil (), "cannot delete machine object" )
311317 })
312318
313319 By ("Eventually original node will be gone" )
314320 Eventually (func () bool {
315- _ , err = getWorkerNode ( )
316- return err != nil && err . Error () == "worker node not found"
321+ _ , err := workloadClientset . CoreV1 (). Nodes (). Get ( ctx , workerNode . Name , metav1. GetOptions {} )
322+ return err != nil && apierrors . IsNotFound ( err )
317323 }, 5 * time .Minute , 5 * time .Second ).Should (BeTrue ())
318324
319325 By ("Eventually new node will be created" )
@@ -357,7 +363,7 @@ var _ = Describe("Restarting, recreating and deleting VMs", func() {
357363 err = task .Wait (ctx )
358364 Expect (err ).ToNot (HaveOccurred (), "cannot wait for vm to power off" )
359365
360- By ("Delete VM fron VC" )
366+ By ("Delete VM from VC" )
361367 task , err = workerVM .Destroy (ctx )
362368 Expect (err ).ToNot (HaveOccurred (), "cannot destroy vm" )
363369
@@ -366,8 +372,8 @@ var _ = Describe("Restarting, recreating and deleting VMs", func() {
366372
367373 By ("Eventually original node will be gone" )
368374 Eventually (func () bool {
369- _ , err = getWorkerNode ( )
370- return err != nil && err . Error () == "worker node not found"
375+ _ , err := workloadClientset . CoreV1 (). Nodes (). Get ( ctx , workerNode . Name , metav1. GetOptions {} )
376+ return err != nil && apierrors . IsNotFound ( err )
371377 }, 5 * time .Minute , 5 * time .Second ).Should (BeTrue ())
372378 })
373379})
0 commit comments