@@ -22,27 +22,28 @@ import (
22
22
"path/filepath"
23
23
"syscall"
24
24
25
- testutils "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/test/e2e/utils"
26
-
27
25
"k8s.io/apimachinery/pkg/util/uuid"
26
+ apimachineryversion "k8s.io/apimachinery/pkg/util/version"
28
27
"k8s.io/klog"
28
+ testutils "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/test/e2e/utils"
29
29
)
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,10 @@ 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" )
88
+ ensureVariable (stagingImage , false , "'staging-image' must not be set when using GKE managed driver" )
89
+ ensureVariable (deployOverlayName , false , "'deploy-overlay-name' must not be set when using GKE managed driver" )
87
90
}
88
91
89
92
ensureVariable (saFile , true , "service-account-file is a required flag" )
@@ -113,7 +116,8 @@ func main() {
113
116
if * deploymentStrat == "gke" {
114
117
ensureFlag (migrationTest , false , "Cannot set deployment strategy to 'gke' for migration tests." )
115
118
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'." )
119
+ ensureExactlyOneVariableSet ([]* string {gkeClusterVer , gkeReleaseChannel },
120
+ "For GKE cluster deployment, exactly one of 'gke-cluster-version' or 'gke-release-channel' must be set" )
117
121
ensureVariable (kubeFeatureGates , false , "Cannot set feature gates when using deployment strategy 'gke'." )
118
122
if len (* localK8sDir ) == 0 {
119
123
ensureVariable (testVersion , true , "Must set either test-version or local k8s dir when using deployment strategy 'gke'." )
@@ -308,12 +312,22 @@ func handle() error {
308
312
}
309
313
}
310
314
311
- normalizedVersion , err := getNormalizedVersion (* kubeVersion , * gkeClusterVer )
312
- if err != nil {
313
- return fmt .Errorf ("failed to get cluster minor version: %v" , err )
315
+ // Kubernetes version of GKE deployments are expected to be of the pattern x.y.z-gke.k,
316
+ // hence we use the main.Version utils to parse and compare GKE managed cluster versions.
317
+ // For clusters deployed on GCE, use the apimachinery version utils (which supports non-gke based semantic versioning).
318
+ clusterVersion := mustGetKubeClusterVersion ()
319
+ fmt .Printf ("Kubernetes cluster version %q\n " , clusterVersion )
320
+ var testSkip string
321
+ switch * deploymentStrat {
322
+ case "gce" :
323
+ testSkip = generateGCETestSkip (clusterVersion )
324
+ case "gke" :
325
+ testSkip = generateGKETestSkip (clusterVersion , * useGKEManagedDriver )
326
+ default :
327
+ return fmt .Errorf ("Unknown deployment strategy %s" , * deploymentStrat )
314
328
}
315
329
316
- testSkip := generateTestSkip ( normalizedVersion )
330
+ fmt . Printf ( "Test skip string %s \n " , testSkip )
317
331
// Run the tests using the testDir kubernetes
318
332
if len (* storageClassFile ) != 0 {
319
333
err = runCSITests (pkgDir , testDir , * testFocus , testSkip , * storageClassFile , * snapshotClassFile , cloudProviderArgs , * deploymentStrat )
@@ -330,30 +344,34 @@ func handle() error {
330
344
return nil
331
345
}
332
346
333
- func generateTestSkip ( normalizedVersion string ) string {
347
+ func generateGCETestSkip ( clusterVersion string ) string {
334
348
skipString := "\\ [Disruptive\\ ]|\\ [Serial\\ ]"
335
- switch normalizedVersion {
336
- // Fall-through versioning since all test cases we want to skip in 1.15
337
- // should also be skipped in 1.14
338
- case "1.13" :
339
- fallthrough
340
- case "1.14" :
341
- fallthrough
342
- case "1.15" :
343
- fallthrough
344
- case "1.16" :
345
- // "volumeMode should not mount / map unused volumes in a pod" tests a
346
- // bug-fix introduced in 1.17
347
- // (https://github.com/kubernetes/kubernetes/pull/81163)
349
+ v := apimachineryversion .MustParseSemantic (clusterVersion )
350
+
351
+ // "volumeMode should not mount / map unused volumes in a pod" tests a
352
+ // (https://github.com/kubernetes/kubernetes/pull/81163)
353
+ if v .LessThan (apimachineryversion .MustParseSemantic ("1.16.0" )) {
354
+ skipString = skipString + "|volumeMode\\ sshould\\ snot\\ smount\\ s/\\ smap\\ sunused\\ svolumes\\ sin\\ sa\\ spod"
355
+ }
356
+
357
+ if v .LessThan (apimachineryversion .MustParseSemantic ("1.17.0" )) {
358
+ skipString = skipString + "|VolumeSnapshotDataSource"
359
+ }
360
+ return skipString
361
+ }
362
+
363
+ func generateGKETestSkip (clusterVersion string , use_gke_managed_driver bool ) string {
364
+ skipString := "\\ [Disruptive\\ ]|\\ [Serial\\ ]"
365
+ curVer := mustParseVersion (clusterVersion )
366
+ if (* curVer ).lessThan (mustParseVersion ("1.16.0" )) {
348
367
skipString = skipString + "|volumeMode\\ sshould\\ snot\\ smount\\ s/\\ smap\\ sunused\\ svolumes\\ sin\\ sa\\ spod"
349
- // Skip Snapshot tests pre 1.17
350
- skipString = skipString + "|snapshot"
351
- fallthrough
352
- case "1.17" :
353
- case "latest" :
354
- case "master" :
355
- default :
356
368
}
369
+
370
+ if (use_gke_managed_driver && (* curVer ).lessThan (mustParseVersion ("1.18.3-gke.0" ))) ||
371
+ (! use_gke_managed_driver && (* curVer ).lessThan (mustParseVersion ("1.17.0" ))) {
372
+ skipString = skipString + "|VolumeSnapshotDataSource"
373
+ }
374
+
357
375
return skipString
358
376
}
359
377
0 commit comments