@@ -30,19 +30,20 @@ import (
30
30
31
31
var (
32
32
// Kubernetes cluster flags
33
- teardownCluster = flag .Bool ("teardown-cluster" , true , "teardown the cluster after the e2e test" )
34
- teardownDriver = flag .Bool ("teardown-driver" , true , "teardown the driver after the e2e test" )
35
- bringupCluster = flag .Bool ("bringup-cluster" , true , "build kubernetes and bringup a cluster" )
36
- gceZone = flag .String ("gce-zone" , "" , "zone that the gce k8s cluster is created/found in" )
37
- gceRegion = flag .String ("gce-region" , "" , "region that gke regional cluster should be created in" )
38
- kubeVersion = flag .String ("kube-version" , "" , "version of Kubernetes to download and use for the cluster" )
39
- testVersion = flag .String ("test-version" , "" , "version of Kubernetes to download and use for tests" )
40
- kubeFeatureGates = flag .String ("kube-feature-gates" , "" , "feature gates to set on new kubernetes cluster" )
41
- localK8sDir = flag .String ("local-k8s-dir" , "" , "local prebuilt kubernetes/kubernetes directory to use for cluster and test binaries" )
42
- deploymentStrat = flag .String ("deployment-strategy" , "gce" , "choose between deploying on gce or gke" )
43
- gkeClusterVer = flag .String ("gke-cluster-version" , "" , "version of Kubernetes master and node for gke" )
44
- numNodes = flag .Int ("num-nodes" , - 1 , "the number of nodes in the test cluster" )
45
- imageType = flag .String ("image-type" , "cos" , "the image type to use for the cluster" )
33
+ teardownCluster = flag .Bool ("teardown-cluster" , true , "teardown the cluster after the e2e test" )
34
+ teardownDriver = flag .Bool ("teardown-driver" , true , "teardown the driver after the e2e test" )
35
+ bringupCluster = flag .Bool ("bringup-cluster" , true , "build kubernetes and bringup a cluster" )
36
+ gceZone = flag .String ("gce-zone" , "" , "zone that the gce k8s cluster is created/found in" )
37
+ gceRegion = flag .String ("gce-region" , "" , "region that gke regional cluster should be created in" )
38
+ kubeVersion = flag .String ("kube-version" , "" , "version of Kubernetes to download and use for the cluster" )
39
+ testVersion = flag .String ("test-version" , "" , "version of Kubernetes to download and use for tests" )
40
+ kubeFeatureGates = flag .String ("kube-feature-gates" , "" , "feature gates to set on new kubernetes cluster" )
41
+ localK8sDir = flag .String ("local-k8s-dir" , "" , "local prebuilt kubernetes/kubernetes directory to use for cluster and test binaries" )
42
+ deploymentStrat = flag .String ("deployment-strategy" , "gce" , "choose between deploying on gce or gke" )
43
+ gkeClusterVer = flag .String ("gke-cluster-version" , "" , "version of Kubernetes master and node for gke" )
44
+ numNodes = flag .Int ("num-nodes" , - 1 , "the number of nodes in the test cluster" )
45
+ imageType = flag .String ("image-type" , "cos" , "the image type to use for the cluster" )
46
+ gkeReleaseChannel = flag .String ("gke-release-channel" , "" , "GKE release channel to be used for cluster deploy. One of 'rapid', 'stable' or 'regular'" )
46
47
47
48
// Test infrastructure flags
48
49
boskosResourceType = flag .String ("boskos-resource-type" , "gce-project" , "name of the boskos resource type to reserve" )
@@ -82,8 +83,8 @@ func main() {
82
83
83
84
if * useGKEManagedDriver {
84
85
ensureVariableVal (deploymentStrat , "gke" , "deployment strategy must be GKE for using managed driver" )
85
- ensureFlag (doDriverBuild , false , "driver build flag will be ignored when using GKE managed driver" )
86
- ensureFlag (teardownDriver , false , "driver teardown flag will be ignored when using GKE managed driver" )
86
+ ensureFlag (doDriverBuild , false , "'do- driver- build' must be false when using GKE managed driver" )
87
+ ensureFlag (teardownDriver , false , "'teardown- driver' must be false when using GKE managed driver" )
87
88
}
88
89
89
90
ensureVariable (saFile , true , "service-account-file is a required flag" )
@@ -113,7 +114,8 @@ func main() {
113
114
if * deploymentStrat == "gke" {
114
115
ensureFlag (migrationTest , false , "Cannot set deployment strategy to 'gke' for migration tests." )
115
116
ensureVariable (kubeVersion , false , "Cannot set kube-version when using deployment strategy 'gke'. Use gke-cluster-version." )
116
- ensureVariable (gkeClusterVer , true , "Must set gke-cluster-version when using deployment strategy 'gke'." )
117
+ ensureExactlyOneVariableSet ([]* string {gkeClusterVer , gkeReleaseChannel },
118
+ "For GKE cluster deployment, exactly one of 'gke-cluster-version' or 'gke-release-channel' must be set" )
117
119
ensureVariable (kubeFeatureGates , false , "Cannot set feature gates when using deployment strategy 'gke'." )
118
120
if len (* localK8sDir ) == 0 {
119
121
ensureVariable (testVersion , true , "Must set either test-version or local k8s dir when using deployment strategy 'gke'." )
@@ -308,12 +310,20 @@ func handle() error {
308
310
}
309
311
}
310
312
311
- normalizedVersion , err := getNormalizedVersion (* kubeVersion , * gkeClusterVer )
312
- if err != nil {
313
- return fmt .Errorf ("failed to get cluster minor version: %v" , err )
313
+ var testSkip string
314
+ if * useGKEManagedDriver {
315
+ clusterVersion := MustGetKubClusterVersion ()
316
+ fmt .Printf ("GKE cluster version %q\n " , clusterVersion )
317
+ testSkip = generateGKEBasedTestSkip (clusterVersion )
318
+ } else {
319
+ normalizedVersion , err := getNormalizedVersion (* kubeVersion , * gkeClusterVer )
320
+ if err != nil {
321
+ return fmt .Errorf ("failed to get cluster minor version: %v" , err )
322
+ }
323
+ testSkip = generateTestSkip (normalizedVersion )
314
324
}
315
325
316
- testSkip := generateTestSkip ( normalizedVersion )
326
+ fmt . Println ( "test skip string " , testSkip )
317
327
// Run the tests using the testDir kubernetes
318
328
if len (* storageClassFile ) != 0 {
319
329
err = runCSITests (pkgDir , testDir , * testFocus , testSkip , * storageClassFile , * snapshotClassFile , cloudProviderArgs , * deploymentStrat )
@@ -357,6 +367,21 @@ func generateTestSkip(normalizedVersion string) string {
357
367
return skipString
358
368
}
359
369
370
+ // Helper function to generate skip string when using GKE managed PD CSI driver.
371
+ func generateGKEBasedTestSkip (clusterVersion string ) string {
372
+ skipString := "\\ [Disruptive\\ ]|\\ [Serial\\ ]"
373
+ curVer := MustParseVersion (clusterVersion )
374
+ if (* curVer ).IsLessThan (MustParseVersion ("1.17.0" )) {
375
+ skipString = skipString + "|volumeMode\\ sshould\\ snot\\ smount\\ s/\\ smap\\ sunused\\ svolumes\\ sin\\ sa\\ spod"
376
+ }
377
+
378
+ if (* curVer ).IsLessThan (MustParseVersion ("1.18.3-gke.0" )) {
379
+ skipString = skipString + "|snapshot"
380
+ }
381
+
382
+ return skipString
383
+ }
384
+
360
385
func setEnvProject (project string ) error {
361
386
out , err := exec .Command ("gcloud" , "config" , "set" , "project" , project ).CombinedOutput ()
362
387
if err != nil {
0 commit comments