@@ -20,6 +20,7 @@ import (
20
20
"context"
21
21
"fmt"
22
22
"hash/fnv"
23
+ "regexp"
23
24
"time"
24
25
25
26
"strings"
@@ -81,7 +82,6 @@ var _ = utils.SIGDescribe("Storage Policy Based Volume Provisioning [Feature:vsp
81
82
scParameters map [string ]string
82
83
policyName string
83
84
tagPolicy string
84
- masterNode string
85
85
)
86
86
ginkgo .BeforeEach (func () {
87
87
e2eskipper .SkipUnlessProviderIs ("vsphere" )
@@ -94,10 +94,6 @@ var _ = utils.SIGDescribe("Storage Policy Based Volume Provisioning [Feature:vsp
94
94
scParameters = make (map [string ]string )
95
95
_ , err := e2enode .GetRandomReadySchedulableNode (f .ClientSet )
96
96
framework .ExpectNoError (err )
97
- masternodes , _ , err := e2enode .DeprecatedGetMasterAndWorkerNodes (client )
98
- framework .ExpectNoError (err )
99
- gomega .Expect (masternodes ).NotTo (gomega .BeEmpty ())
100
- masterNode = masternodes .List ()[0 ]
101
97
})
102
98
103
99
// Valid policy.
@@ -211,7 +207,9 @@ var _ = utils.SIGDescribe("Storage Policy Based Volume Provisioning [Feature:vsp
211
207
scParameters [Datastore ] = vsanDatastore
212
208
framework .Logf ("Invoking test for SPBM storage policy: %+v" , scParameters )
213
209
kubernetesClusterName := GetAndExpectStringEnvVar (KubernetesClusterName )
214
- invokeStaleDummyVMTestWithStoragePolicy (client , masterNode , namespace , kubernetesClusterName , scParameters )
210
+ controlPlaneNode , err := getControlPlaneNode (client )
211
+ framework .ExpectNoError (err )
212
+ invokeStaleDummyVMTestWithStoragePolicy (client , controlPlaneNode , namespace , kubernetesClusterName , scParameters )
215
213
})
216
214
217
215
ginkgo .It ("verify if a SPBM policy is not honored on a non-compatible datastore for dynamically provisioned pvc using storageclass" , func () {
@@ -309,7 +307,9 @@ func invokeInvalidPolicyTestNeg(client clientset.Interface, namespace string, sc
309
307
return fmt .Errorf ("Failure message: %+q" , eventList .Items [0 ].Message )
310
308
}
311
309
312
- func invokeStaleDummyVMTestWithStoragePolicy (client clientset.Interface , masterNode string , namespace string , clusterName string , scParameters map [string ]string ) {
310
+ // invokeStaleDummyVMTestWithStoragePolicy assumes control plane node is present on the datacenter specified in the workspace section of vsphere.conf file.
311
+ // With in-tree VCP, when the volume is created using storage policy, shadow (dummy) VM is getting created and deleted to apply SPBM policy on the volume.
312
+ func invokeStaleDummyVMTestWithStoragePolicy (client clientset.Interface , controlPlaneNode string , namespace string , clusterName string , scParameters map [string ]string ) {
313
313
ginkgo .By ("Creating Storage Class With storage policy params" )
314
314
storageclass , err := client .StorageV1 ().StorageClasses ().Create (context .TODO (), getVSphereStorageClassSpec ("storagepolicysc" , scParameters , nil , "" ), metav1.CreateOptions {})
315
315
framework .ExpectNoError (err , fmt .Sprintf ("Failed to create storage class with err: %v" , err ))
@@ -336,8 +336,27 @@ func invokeStaleDummyVMTestWithStoragePolicy(client clientset.Interface, masterN
336
336
fnvHash .Write ([]byte (vmName ))
337
337
dummyVMFullName := dummyVMPrefixName + "-" + fmt .Sprint (fnvHash .Sum32 ())
338
338
errorMsg := "Dummy VM - " + vmName + " is still present. Failing the test.."
339
- nodeInfo := TestContext .NodeMapper .GetNodeInfo (masterNode )
339
+ nodeInfo := TestContext .NodeMapper .GetNodeInfo (controlPlaneNode )
340
340
isVMPresentFlag , err := nodeInfo .VSphere .IsVMPresent (dummyVMFullName , nodeInfo .DataCenterRef )
341
341
framework .ExpectNoError (err )
342
342
framework .ExpectEqual (isVMPresentFlag , false , errorMsg )
343
343
}
344
+
345
+ func getControlPlaneNode (client clientset.Interface ) (string , error ) {
346
+ regKubeScheduler := regexp .MustCompile ("kube-scheduler-.*" )
347
+ regKubeControllerManager := regexp .MustCompile ("kube-controller-manager-.*" )
348
+
349
+ podList , err := client .CoreV1 ().Pods (metav1 .NamespaceSystem ).List (context .TODO (), metav1.ListOptions {})
350
+ if err != nil {
351
+ return "" , err
352
+ }
353
+ if len (podList .Items ) < 1 {
354
+ return "" , fmt .Errorf ("could not find any pods in namespace %s to grab metrics from" , metav1 .NamespaceSystem )
355
+ }
356
+ for _ , pod := range podList .Items {
357
+ if regKubeScheduler .MatchString (pod .Name ) || regKubeControllerManager .MatchString (pod .Name ) {
358
+ return pod .Spec .NodeName , nil
359
+ }
360
+ }
361
+ return "" , fmt .Errorf ("could not find any nodes where control plane pods are running" )
362
+ }
0 commit comments