@@ -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