@@ -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"
@@ -70,45 +71,40 @@ func init() {
70
71
func main () {
71
72
flag .Parse ()
72
73
73
- if len ( * stagingImage ) == 0 && ! * inProw {
74
- klog . Fatalf ( "staging-image is a required flag, please specify the name of image to stage to" )
74
+ if ! * inProw {
75
+ ensureVariable ( stagingImage , true , "staging-image is a required flag, please specify the name of image to stage to" )
75
76
}
76
77
77
- if len (* saFile ) == 0 {
78
- klog .Fatalf ("service-account-file is a required flag" )
79
- }
80
-
81
- if len (* deployOverlayName ) == 0 {
82
- klog .Fatalf ("deploy-overlay-name is a required flag" )
83
- }
84
-
85
- if len (* storageClassFile ) == 0 && ! * migrationTest {
86
- klog .Fatalf ("One of storageclass-file and migration-test must be set" )
87
- }
88
-
89
- if len (* storageClassFile ) != 0 && * migrationTest {
90
- klog .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
- klog .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
- klog . 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
- klog .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
- klog .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
- klog .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
@@ -420,7 +417,7 @@ func getOverlayDir(pkgDir, deployOverlayName string) string {
420
417
return filepath .Join (pkgDir , "deploy" , "kubernetes" , "overlays" , deployOverlayName )
421
418
}
422
419
423
- func installDriver (goPath , pkgDir , k8sDir , stagingImage , stagingVersion , deployOverlayName string , doDriverBuild bool ) error {
420
+ func installDriver (goPath , pkgDir , stagingImage , stagingVersion , deployOverlayName string , doDriverBuild bool ) error {
424
421
if doDriverBuild {
425
422
// Install kustomize
426
423
out , err := exec .Command (filepath .Join (pkgDir , "deploy" , "kubernetes" , "install-kustomize.sh" )).CombinedOutput ()
@@ -449,10 +446,8 @@ func installDriver(goPath, pkgDir, k8sDir, stagingImage, stagingVersion, deployO
449
446
}
450
447
451
448
// setup service account file for secret creation
452
- tmpSaFile := fmt .Sprintf ("/tmp/%s/cloud-sa.json" , string (uuid .NewUUID ()))
453
-
454
- os .MkdirAll (filepath .Dir (tmpSaFile ), 0750 )
455
- defer os .Remove (filepath .Dir (tmpSaFile ))
449
+ tmpSaFile := filepath .Join (generateUniqueTmpDir (), "cloud-sa.json" )
450
+ defer removeDir (filepath .Dir (tmpSaFile ))
456
451
457
452
// Need to copy it to name the file "cloud-sa.json"
458
453
out , err := exec .Command ("cp" , * saFile , tmpSaFile ).CombinedOutput ()
@@ -602,3 +597,32 @@ func deleteImage(stagingImage, stagingVersion string) error {
602
597
}
603
598
return nil
604
599
}
600
+
601
+ func generateUniqueTmpDir () string {
602
+ dir , err := ioutil .TempDir ("" , "gcp-pd-driver-tmp" )
603
+ if err != nil {
604
+ klog .Fatalf ("Error creating temp dir: %v" , err )
605
+ }
606
+ return dir
607
+ }
608
+
609
+ func removeDir (dir string ) {
610
+ err := os .RemoveAll (dir )
611
+ if err != nil {
612
+ klog .Fatalf ("Error removing temp dir: %v" , err )
613
+ }
614
+ }
615
+
616
+ func ensureVariable (v * string , set bool , msgOnError string ) {
617
+ if set && len (* v ) == 0 {
618
+ klog .Fatal (msgOnError )
619
+ } else if ! set && len (* v ) != 0 {
620
+ klog .Fatal (msgOnError )
621
+ }
622
+ }
623
+
624
+ func ensureFlag (v * bool , setTo bool , msgOnError string ) {
625
+ if * v != setTo {
626
+ klog .Fatal (msgOnError )
627
+ }
628
+ }
0 commit comments