Skip to content

Commit 153e802

Browse files
author
Hantao (Will) Wang
committed
add test-version flag and separate building k8s from cluster up
1 parent e0386a6 commit 153e802

File tree

1 file changed

+74
-43
lines changed

1 file changed

+74
-43
lines changed

test/k8s-integration/main.go

+74-43
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@ var (
3737
teardownDriver = flag.Bool("teardown-driver", true, "teardown the driver after the e2e test")
3838
bringupCluster = flag.Bool("bringup-cluster", true, "build kubernetes and bringup a cluster")
3939
gceZone = flag.String("gce-zone", "", "zone that the gce k8s cluster is created/found in")
40-
kubeVersion = flag.String("kube-version", "master", "version of Kubernetes to download and use")
40+
kubeVersion = flag.String("kube-version", "", "version of Kubernetes to download and use for the cluster")
41+
testVersion = flag.String("test-version", "", "version of Kubernetes to download and use for tests")
4142
kubeFeatureGates = flag.String("kube-feature-gates", "", "feature gates to set on new kubernetes cluster")
42-
localK8sDir = flag.String("local-k8s-dir", "", "local kubernetes/kubernetes directory to run e2e tests from")
43-
deploymentStrat = flag.String("deployment-strategy", "gce", "choose between deploying on gce or gke")
44-
gkeClusterVer = flag.String("gke-cluster-version", "latest", "version of Kubernetes master and node for gke")
45-
43+
localK8sDir = flag.String("local-k8s-dir", "", "local prebuilt kubernetes/kubernetes directory to use for cluster and test binaries")
44+
deploymentStrat = flag.String("deployment-strategy", "", "choose between deploying on gce or gke")
45+
gkeClusterVer = flag.String("gke-cluster-version", "", "version of Kubernetes master and node for gke")
4646
// Test infrastructure flags
4747
boskosResourceType = flag.String("boskos-resource-type", "gce-project", "name of the boskos resource type to reserve")
4848
storageClassFile = flag.String("storageclass-file", "", "name of storageclass yaml file to use for test relative to test/k8s-integration/config")
@@ -68,6 +68,7 @@ const (
6868
func init() {
6969
flag.Set("logtostderr", "true")
7070
}
71+
7172
func main() {
7273
flag.Parse()
7374

@@ -101,10 +102,14 @@ func main() {
101102
ensureVariable(kubeVersion, false, "Cannot set kube-version when using deployment strategy 'gke'. Use gke-cluster-version.")
102103
ensureVariable(gkeClusterVer, true, "Must set gke-cluster-version when using deployment strategy 'gke'.")
103104
ensureVariable(kubeFeatureGates, false, "Cannot set feature gates when using deployment strategy 'gke'.")
105+
if len(*localK8sDir) == 0 {
106+
ensureVariable(testVersion, true, "Must set either test-version or local k8s dir when using deployment strategy 'gke'.")
107+
}
104108
}
105109

106110
if len(*localK8sDir) != 0 {
107111
ensureVariable(kubeVersion, false, "Cannot set a kube version when using a local k8s dir.")
112+
ensureVariable(testVersion, false, "Cannot set a test version when using a local k8s dir.")
108113
}
109114
}
110115

@@ -118,11 +123,10 @@ func handle() error {
118123
if !ok {
119124
return fmt.Errorf("Could not find env variable GOPATH")
120125
}
126+
121127
pkgDir := filepath.Join(goPath, "src", "sigs.k8s.io", "gcp-compute-persistent-disk-csi-driver")
122-
k8sParentDir := generateUniqueTmpDir()
123-
k8sDir := filepath.Join(k8sParentDir, "kubernetes")
124-
defer removeDir(k8sParentDir)
125128

129+
// If running in Prow, then acquire and set up a project through Boskos
126130
if *inProw {
127131
project, _ := testutils.SetupProwConfig(*boskosResourceType)
128132

@@ -154,69 +158,78 @@ func handle() error {
154158
}
155159
}
156160

161+
// Build and push the driver, if required. Defer the driver image deletion.
157162
if *doDriverBuild {
158163
err := pushImage(pkgDir, *stagingImage, stagingVersion)
159164
if err != nil {
160165
return fmt.Errorf("failed pushing image: %v", err)
161166
}
162167
defer func() {
163168
if *teardownCluster {
164-
err = deleteImage(*stagingImage, stagingVersion)
169+
err := deleteImage(*stagingImage, stagingVersion)
165170
if err != nil {
166171
klog.Errorf("failed to delete image: %v", err)
167172
}
168173
}
169174
}()
170175
}
171176

172-
if *bringupCluster {
177+
// Create temporary directories for kubernetes builds
178+
k8sParentDir := generateUniqueTmpDir()
179+
k8sDir := filepath.Join(k8sParentDir, "kubernetes")
180+
testParentDir := generateUniqueTmpDir()
181+
testDir := filepath.Join(testParentDir, "kubernetes")
182+
defer removeDir(k8sParentDir)
183+
defer removeDir(testParentDir)
184+
185+
// If kube version is set, then download and build Kubernetes for cluster creation
186+
// Otherwise, either GKE or a prebuild local K8s dir is being used
187+
if len(*kubeVersion) != 0 {
173188
err := downloadKubernetesSource(pkgDir, k8sParentDir, *kubeVersion)
174189
if err != nil {
175190
return fmt.Errorf("failed to download Kubernetes source: %v", err)
176191
}
177-
178192
err = buildKubernetes(k8sDir)
179193
if err != nil {
180194
return fmt.Errorf("failed to build Kubernetes: %v", err)
181195
}
196+
} else {
197+
k8sDir = *localK8sDir
198+
}
182199

183-
kshPath := filepath.Join(k8sDir, "cluster", "kubectl.sh")
184-
_, err = os.Stat(kshPath)
185-
if err == nil {
186-
// Set kubectl to the one bundled in the k8s tar for versioning
187-
err = os.Setenv("GCE_PD_KUBECTL", kshPath)
188-
if err != nil {
189-
return fmt.Errorf("failed to set cluster specific kubectl: %v", err)
190-
}
191-
} else {
192-
klog.Errorf("could not find cluster kubectl at %s, falling back to default kubectl", kshPath)
200+
// If test version is set, then download and build Kubernetes to run K8s tests
201+
// Otherwise, either kube version is set (which implies GCE) or a local K8s dir is being used
202+
if len(*testVersion) != 0 && *testVersion != *kubeVersion {
203+
// TODO: Build only the tests
204+
err := downloadKubernetesSource(pkgDir, testParentDir, *testVersion)
205+
if err != nil {
206+
return fmt.Errorf("failed to download Kubernetes source: %v", err)
193207
}
194-
195-
if len(*kubeFeatureGates) != 0 {
196-
err = os.Setenv("KUBE_FEATURE_GATES", *kubeFeatureGates)
197-
if err != nil {
198-
return fmt.Errorf("failed to set kubernetes feature gates: %v", err)
199-
}
200-
klog.V(4).Infof("Set Kubernetes feature gates: %v", *kubeFeatureGates)
208+
err = buildKubernetes(testDir)
209+
if err != nil {
210+
return fmt.Errorf("failed to build Kubernetes: %v", err)
201211
}
212+
} else {
213+
testDir = k8sDir
214+
}
202215

216+
// Create a cluster either through GKE or GCE
217+
if *bringupCluster {
218+
var err error = nil
203219
switch *deploymentStrat {
204220
case "gce":
205221
err = clusterUpGCE(k8sDir, *gceZone)
206-
if err != nil {
207-
return fmt.Errorf("failed to cluster up: %v", err)
208-
}
209222
case "gke":
210223
err = clusterUpGKE(*gceZone)
211-
if err != nil {
212-
return fmt.Errorf("failed to cluster up: %v", err)
213-
}
214224
default:
215-
return fmt.Errorf("deployment-strategy must be set to 'gce' or 'gke', but is: %s", *deploymentStrat)
225+
err = fmt.Errorf("deployment-strategy must be set to 'gce' or 'gke', but is: %s", *deploymentStrat)
226+
}
227+
if err != nil {
228+
return fmt.Errorf("failed to cluster up: %v", err)
216229
}
217-
218230
}
219231

232+
// Defer the tear down of the cluster through GKE or GCE
220233
if *teardownCluster {
221234
defer func() {
222235
switch *deploymentStrat {
@@ -236,6 +249,7 @@ func handle() error {
236249
}()
237250
}
238251

252+
// Install the driver and defer its teardown
239253
err := installDriver(goPath, pkgDir, *stagingImage, stagingVersion, *deployOverlayName, *doDriverBuild)
240254
if *teardownDriver {
241255
defer func() {
@@ -249,14 +263,11 @@ func handle() error {
249263
return fmt.Errorf("failed to install CSI Driver: %v", err)
250264
}
251265

252-
if len(*localK8sDir) != 0 {
253-
k8sDir = *localK8sDir
254-
}
255-
266+
// Run the tests using the testDir kubernetes
256267
if len(*storageClassFile) != 0 {
257-
err = runCSITests(pkgDir, k8sDir, *testFocus, *storageClassFile, *gceZone)
268+
err = runCSITests(pkgDir, testDir, *testFocus, *storageClassFile, *gceZone)
258269
} else if *migrationTest {
259-
err = runMigrationTests(pkgDir, k8sDir, *testFocus, *gceZone)
270+
err = runMigrationTests(pkgDir, testDir, *testFocus, *gceZone)
260271
} else {
261272
return fmt.Errorf("Did not run either CSI or Migration test")
262273
}
@@ -377,7 +388,27 @@ func buildKubernetes(k8sDir string) error {
377388
}
378389

379390
func clusterUpGCE(k8sDir, gceZone string) error {
380-
err := os.Setenv("KUBE_GCE_ZONE", gceZone)
391+
kshPath := filepath.Join(k8sDir, "cluster", "kubectl.sh")
392+
_, err := os.Stat(kshPath)
393+
if err == nil {
394+
// Set kubectl to the one bundled in the k8s tar for versioning
395+
err = os.Setenv("GCE_PD_KUBECTL", kshPath)
396+
if err != nil {
397+
return fmt.Errorf("failed to set cluster specific kubectl: %v", err)
398+
}
399+
} else {
400+
klog.Errorf("could not find cluster kubectl at %s, falling back to default kubectl", kshPath)
401+
}
402+
403+
if len(*kubeFeatureGates) != 0 {
404+
err = os.Setenv("KUBE_FEATURE_GATES", *kubeFeatureGates)
405+
if err != nil {
406+
return fmt.Errorf("failed to set kubernetes feature gates: %v", err)
407+
}
408+
klog.V(4).Infof("Set Kubernetes feature gates: %v", *kubeFeatureGates)
409+
}
410+
411+
err = os.Setenv("KUBE_GCE_ZONE", gceZone)
381412
if err != nil {
382413
return err
383414
}

0 commit comments

Comments
 (0)