@@ -17,6 +17,7 @@ package main
17
17
import (
18
18
"flag"
19
19
"fmt"
20
+ "io/ioutil"
20
21
"os"
21
22
"os/exec"
22
23
"path/filepath"
@@ -69,46 +70,41 @@ func init() {
69
70
}
70
71
func main () {
71
72
flag .Parse ()
72
-
73
- if len (* stagingImage ) == 0 && ! * inProw {
74
- glog .Fatalf ("staging-image is a required flag, please specify the name of image to stage to" )
75
- }
76
-
77
- if len (* saFile ) == 0 {
78
- glog .Fatalf ("service-account-file is a required flag" )
79
- }
80
-
81
- if len (* deployOverlayName ) == 0 {
82
- glog .Fatalf ("deploy-overlay-name is a required flag" )
83
- }
84
-
85
- if len (* storageClassFile ) == 0 && ! * migrationTest {
86
- glog .Fatalf ("One of storageclass-file and migration-test must be set" )
73
+
74
+ if ! * inProw {
75
+ ensureVariable (stagingImage , true , "staging-image is a required flag, please specify the name of image to stage to" )
87
76
}
88
77
89
- if len (* storageClassFile ) != 0 && * migrationTest {
90
- glog .Fatalf ("storage-class-file and migration-test cannot both be set" )
91
- }
78
+ ensureVariable (saFile , true , "service-account-file is a required flag" )
79
+ ensureVariable (deployOverlayName , true , "deploy-overlay-name is a required flag" )
80
+ ensureVariable (testFocus , true , "test-focus is a required flag" )
81
+ ensureVariable (gceZone , true , "gce-zone is a required flag" )
92
82
93
- if ! * bringupCluster && len (* kubeFeatureGates ) > 0 {
94
- glog .Fatalf ("kube-feature-gates set but not bringing up new cluster" )
83
+ if * migrationTest {
84
+ ensureVariable (storageClassFile , false , "storage-class-file and migration-test cannot both be set" )
85
+ } else {
86
+ ensureVariable (storageClassFile , true , "One of storageclass-file and migration-test must be set" )
95
87
}
96
88
97
- if len ( * testFocus ) == 0 {
98
- glog . Fatalf ( "test-focus is a required flag " )
89
+ if ! * bringupCluster {
90
+ ensureVariable ( kubeFeatureGates , false , "kube-feature-gates set but not bringing up new cluster " )
99
91
}
100
92
101
- if len (* gceZone ) == 0 {
102
- glog .Fatalf ("gce-zone is a required flag" )
93
+ if * bringupCluster || * teardownCluster {
94
+ ensureVariable (deploymentStrat , true , "Must set the deployment strategy if bringing up or down cluster." )
95
+ } else {
96
+ ensureVariable (deploymentStrat , false , "Cannot set the deployment strategy if not bringing up or down cluster." )
103
97
}
104
98
105
- if * deploymentStrat == "gke" && * migrationTest {
106
- glog .Fatalf ("Cannot set deployment strategy to 'gke' for migration tests." )
99
+ if * deploymentStrat == "gke" {
100
+ ensureFlag (migrationTest , false , "Cannot set deployment strategy to 'gke' for migration tests." )
101
+ ensureVariable (kubeVersion , false , "Cannot set kube-version when using deployment strategy 'gke'. Use gke-cluster-version." )
102
+ ensureVariable (gkeClusterVer , true , "Must set gke-cluster-version when using deployment strategy 'gke'." )
103
+ ensureVariable (kubeFeatureGates , false , "Cannot set feature gates when using deployment strategy 'gke'." )
107
104
}
108
105
109
- err := handle ()
110
- if err != nil {
111
- glog .Fatalf ("Failed to run integration test: %v" , err )
106
+ if len (* localK8sDir ) != 0 {
107
+ ensureVariable (kubeVersion , false , "Cannot set a kube version when using a local k8s dir." )
112
108
}
113
109
}
114
110
@@ -123,8 +119,9 @@ func handle() error {
123
119
return fmt .Errorf ("Could not find env variable GOPATH" )
124
120
}
125
121
pkgDir := filepath .Join (goPath , "src" , "sigs.k8s.io" , "gcp-compute-persistent-disk-csi-driver" )
126
- k8sIoDir := filepath .Join (pkgDir , "test" , "k8s-integration" , "src" , "k8s.io" )
127
- k8sDir := filepath .Join (k8sIoDir , "kubernetes" )
122
+ k8sParentDir := generateUniqueTmpDir ()
123
+ k8sDir := filepath .Join (k8sParentDir , "kubernetes" )
124
+ defer removeDir (k8sParentDir )
128
125
129
126
if * inProw {
130
127
project , _ := testutils .SetupProwConfig (* boskosResourceType )
@@ -173,7 +170,7 @@ func handle() error {
173
170
}
174
171
175
172
if * bringupCluster {
176
- err := downloadKubernetesSource (pkgDir , k8sIoDir , * kubeVersion )
173
+ err := downloadKubernetesSource (pkgDir , k8sParentDir , * kubeVersion )
177
174
if err != nil {
178
175
return fmt .Errorf ("failed to download Kubernetes source: %v" , err )
179
176
}
@@ -239,7 +236,7 @@ func handle() error {
239
236
}()
240
237
}
241
238
242
- err := installDriver (goPath , pkgDir , k8sDir , * stagingImage , stagingVersion , * deployOverlayName , * doDriverBuild )
239
+ err := installDriver (goPath , pkgDir , * stagingImage , stagingVersion , * deployOverlayName , * doDriverBuild )
243
240
if * teardownDriver {
244
241
defer func () {
245
242
// TODO (#140): collect driver logs
@@ -419,7 +416,7 @@ func getOverlayDir(pkgDir, deployOverlayName string) string {
419
416
return filepath .Join (pkgDir , "deploy" , "kubernetes" , "overlays" , deployOverlayName )
420
417
}
421
418
422
- func installDriver (goPath , pkgDir , k8sDir , stagingImage , stagingVersion , deployOverlayName string , doDriverBuild bool ) error {
419
+ func installDriver (goPath , pkgDir , stagingImage , stagingVersion , deployOverlayName string , doDriverBuild bool ) error {
423
420
if doDriverBuild {
424
421
// Install kustomize
425
422
out , err := exec .Command (filepath .Join (pkgDir , "deploy" , "kubernetes" , "install-kustomize.sh" )).CombinedOutput ()
@@ -448,10 +445,8 @@ func installDriver(goPath, pkgDir, k8sDir, stagingImage, stagingVersion, deployO
448
445
}
449
446
450
447
// setup service account file for secret creation
451
- tmpSaFile := fmt .Sprintf ("/tmp/%s/cloud-sa.json" , string (uuid .NewUUID ()))
452
-
453
- os .MkdirAll (filepath .Dir (tmpSaFile ), 0750 )
454
- defer os .Remove (filepath .Dir (tmpSaFile ))
448
+ tmpSaFile := filepath .Join (generateUniqueTmpDir (), "cloud-sa.json" )
449
+ defer removeDir (filepath .Dir (tmpSaFile ))
455
450
456
451
// Need to copy it to name the file "cloud-sa.json"
457
452
out , err := exec .Command ("cp" , * saFile , tmpSaFile ).CombinedOutput ()
@@ -601,3 +596,32 @@ func deleteImage(stagingImage, stagingVersion string) error {
601
596
}
602
597
return nil
603
598
}
599
+
600
+ func generateUniqueTmpDir () string {
601
+ dir , err := ioutil .TempDir ("" , "gcp-pd-driver-tmp" )
602
+ if err != nil {
603
+ klog .Fatalf ("Error creating temp dir: %v" , err )
604
+ }
605
+ return dir
606
+ }
607
+
608
+ func removeDir (dir string ) {
609
+ err := os .RemoveAll (dir )
610
+ if err != nil {
611
+ klog .Fatalf ("Error removing temp dir: %v" , err )
612
+ }
613
+ }
614
+
615
+ func ensureVariable (v * string , set bool , msgOnError string ) {
616
+ if set && len (* v ) == 0 {
617
+ klog .Fatal (msgOnError )
618
+ } else if ! set && len (* v ) != 0 {
619
+ klog .Fatal (msgOnError )
620
+ }
621
+ }
622
+
623
+ func ensureFlag (v * bool , setTo bool , msgOnError string ) {
624
+ if * v != setTo {
625
+ klog .Fatal (msgOnError )
626
+ }
627
+ }
0 commit comments