39
39
kubeVersion = flag .String ("kube-version" , "master" , "version of Kubernetes to download and use" )
40
40
kubeFeatureGates = flag .String ("kube-feature-gates" , "" , "feature gates to set on new kubernetes cluster" )
41
41
localK8sDir = flag .String ("local-k8s-dir" , "" , "local kubernetes/kubernetes directory to run e2e tests from" )
42
+ deploymentStrat = flag .String ("deployment-strategy" , "gce" , "choose between deploying on gce or gke" )
43
+ gkeClusterVer = flag .String ("gke-cluster-version" , "latest" , "version of Kubernetes master and node for gke" )
42
44
43
45
// Test infrastructure flags
44
46
boskosResourceType = flag .String ("boskos-resource-type" , "gce-project" , "name of the boskos resource type to reserve" )
59
61
const (
60
62
pdImagePlaceholder = "gke.gcr.io/gcp-compute-persistent-disk-csi-driver"
61
63
k8sBuildBinDir = "_output/dockerized/bin/linux/amd64"
64
+ gkeTestClusterName = "gcp-pd-csi-driver-test-cluster"
62
65
)
63
66
64
67
func init () {
@@ -99,6 +102,10 @@ func main() {
99
102
glog .Fatalf ("gce-zone is a required flag" )
100
103
}
101
104
105
+ if * deploymentStrat == "gke" && * migrationTest {
106
+ glog .Fatalf ("Cannot set deployment strategy to 'gke' for migration tests." )
107
+ }
108
+
102
109
err := handle ()
103
110
if err != nil {
104
111
glog .Fatalf ("Failed to run integration test: %v" , err )
@@ -196,17 +203,38 @@ func handle() error {
196
203
glog .V (4 ).Infof ("Set Kubernetes feature gates: %v" , * kubeFeatureGates )
197
204
}
198
205
199
- err = clusterUp (k8sDir , * gceZone )
200
- if err != nil {
201
- return fmt .Errorf ("failed to cluster up: %v" , err )
206
+ switch * deploymentStrat {
207
+ case "gce" :
208
+ err = clusterUpGCE (k8sDir , * gceZone )
209
+ if err != nil {
210
+ return fmt .Errorf ("failed to cluster up: %v" , err )
211
+ }
212
+ case "gke" :
213
+ err = clusterUpGKE (* gceZone )
214
+ if err != nil {
215
+ return fmt .Errorf ("failed to cluster up: %v" , err )
216
+ }
217
+ default :
218
+ return fmt .Errorf ("deployment-strategy must be set to 'gce' or 'gke', but is: %s" , * deploymentStrat )
202
219
}
220
+
203
221
}
204
222
205
223
if * teardownCluster {
206
224
defer func () {
207
- err := clusterDown (k8sDir )
208
- if err != nil {
209
- glog .Errorf ("failed to cluster down: %v" , err )
225
+ switch * deploymentStrat {
226
+ case "gce" :
227
+ err := clusterDownGCE (k8sDir )
228
+ if err != nil {
229
+ glog .Errorf ("failed to cluster down: %v" , err )
230
+ }
231
+ case "gke" :
232
+ err := clusterDownGKE (* gceZone )
233
+ if err != nil {
234
+ glog .Errorf ("failed to cluster down: %v" , err )
235
+ }
236
+ default :
237
+ glog .Errorf ("deployment-strategy must be set to 'gce' or 'gke', but is: %s" , * deploymentStrat )
210
238
}
211
239
}()
212
240
}
@@ -322,11 +350,21 @@ func runCommand(action string, cmd *exec.Cmd) error {
322
350
return nil
323
351
}
324
352
325
- func clusterDown (k8sDir string ) error {
353
+ func clusterDownGCE (k8sDir string ) error {
326
354
cmd := exec .Command (filepath .Join (k8sDir , "hack" , "e2e-internal" , "e2e-down.sh" ))
327
- err := runCommand ("Bringing Down E2E Cluster" , cmd )
355
+ err := runCommand ("Bringing Down E2E Cluster on GCE" , cmd )
356
+ if err != nil {
357
+ return fmt .Errorf ("failed to bring down kubernetes e2e cluster on gce: %v" , err )
358
+ }
359
+ return nil
360
+ }
361
+
362
+ func clusterDownGKE (gceZone string ) error {
363
+ cmd := exec .Command ("gcloud" , "container" , "clusters" , "delete" , gkeTestClusterName ,
364
+ "--zone" , gceZone , "--quiet" )
365
+ err := runCommand ("Bringing Down E2E Cluster on GKE" , cmd )
328
366
if err != nil {
329
- return fmt .Errorf ("failed to bring down kubernetes e2e cluster: %v" , err )
367
+ return fmt .Errorf ("failed to bring down kubernetes e2e cluster on gke : %v" , err )
330
368
}
331
369
return nil
332
370
}
@@ -340,15 +378,38 @@ func buildKubernetes(k8sDir string) error {
340
378
return nil
341
379
}
342
380
343
- func clusterUp (k8sDir , gceZone string ) error {
381
+ func clusterUpGCE (k8sDir , gceZone string ) error {
344
382
err := os .Setenv ("KUBE_GCE_ZONE" , gceZone )
345
383
if err != nil {
346
384
return err
347
385
}
348
386
cmd := exec .Command (filepath .Join (k8sDir , "hack" , "e2e-internal" , "e2e-up.sh" ))
349
- err = runCommand ("Starting E2E Cluster" , cmd )
387
+ err = runCommand ("Starting E2E Cluster on GCE" , cmd )
388
+ if err != nil {
389
+ return fmt .Errorf ("failed to bring up kubernetes e2e cluster on gce: %v" , err )
390
+ }
391
+
392
+ return nil
393
+ }
394
+
395
+ func clusterUpGKE (gceZone string ) error {
396
+ out , err := exec .Command ("gcloud" , "container" , "clusters" , "list" , "--zone" , gceZone ,
397
+ "--filter" , fmt .Sprintf ("name=%s" , gkeTestClusterName )).CombinedOutput ()
398
+ if err != nil {
399
+ return fmt .Errorf ("failed to check for previous test cluster: %v %s" , err , out )
400
+ }
401
+ if len (out ) > 0 {
402
+ glog .Infof ("Detected previous cluster %s. Deleting so a new one can be created..." , gkeTestClusterName )
403
+ err = clusterDownGKE (gceZone )
404
+ if err != nil {
405
+ return err
406
+ }
407
+ }
408
+ cmd := exec .Command ("gcloud" , "container" , "clusters" , "create" , gkeTestClusterName ,
409
+ "--zone" , gceZone , "--cluster-version" , * gkeClusterVer , "--quiet" )
410
+ err = runCommand ("Staring E2E Cluster on GKE" , cmd )
350
411
if err != nil {
351
- return fmt .Errorf ("failed to bring up kubernetes e2e cluster: %v" , err )
412
+ return fmt .Errorf ("failed to bring up kubernetes e2e cluster on gke : %v" , err )
352
413
}
353
414
354
415
return nil
0 commit comments