@@ -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,19 @@ 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 )
317
326
// Run the tests using the testDir kubernetes
318
327
if len (* storageClassFile ) != 0 {
319
328
err = runCSITests (pkgDir , testDir , * testFocus , testSkip , * storageClassFile , * snapshotClassFile , cloudProviderArgs , * deploymentStrat )
@@ -357,6 +366,21 @@ func generateTestSkip(normalizedVersion string) string {
357
366
return skipString
358
367
}
359
368
369
+ // Helper function to generate skip string when using GKE managed PD CSI driver.
370
+ func generateGKEBasedTestSkip (clusterVersion string ) string {
371
+ skipString := "\\ [Disruptive\\ ]|\\ [Serial\\ ]"
372
+ curVer := MustParseVersion (clusterVersion )
373
+ if (* curVer ).IsLessThan (MustParseVersion ("1.17.0" )) {
374
+ skipString = skipString + "|volumeMode\\ sshould\\ snot\\ smount\\ s/\\ smap\\ sunused\\ svolumes\\ sin\\ sa\\ spod"
375
+ }
376
+
377
+ if (* curVer ).IsLessThan (MustParseVersion ("1.18.3-gke.0" )) {
378
+ skipString = skipString + "|snapshot"
379
+ }
380
+
381
+ return skipString
382
+ }
383
+
360
384
func setEnvProject (project string ) error {
361
385
out , err := exec .Command ("gcloud" , "config" , "set" , "project" , project ).CombinedOutput ()
362
386
if err != nil {
0 commit comments