Skip to content

Commit 64b78c7

Browse files
authored
Merge pull request #288 from hantaowang/gke-integration-tests
add ability to use gcloud to boot a gke cluster for e2e integration
2 parents 7b310af + 531f5c7 commit 64b78c7

File tree

3 files changed

+80
-14
lines changed

3 files changed

+80
-14
lines changed

test/k8s-integration/main.go

+73-12
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ var (
3939
kubeVersion = flag.String("kube-version", "master", "version of Kubernetes to download and use")
4040
kubeFeatureGates = flag.String("kube-feature-gates", "", "feature gates to set on new kubernetes cluster")
4141
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")
4244

4345
// Test infrastructure flags
4446
boskosResourceType = flag.String("boskos-resource-type", "gce-project", "name of the boskos resource type to reserve")
@@ -59,6 +61,7 @@ var (
5961
const (
6062
pdImagePlaceholder = "gke.gcr.io/gcp-compute-persistent-disk-csi-driver"
6163
k8sBuildBinDir = "_output/dockerized/bin/linux/amd64"
64+
gkeTestClusterName = "gcp-pd-csi-driver-test-cluster"
6265
)
6366

6467
func init() {
@@ -99,6 +102,10 @@ func main() {
99102
glog.Fatalf("gce-zone is a required flag")
100103
}
101104

105+
if *deploymentStrat == "gke" && *migrationTest {
106+
glog.Fatalf("Cannot set deployment strategy to 'gke' for migration tests.")
107+
}
108+
102109
err := handle()
103110
if err != nil {
104111
glog.Fatalf("Failed to run integration test: %v", err)
@@ -196,17 +203,38 @@ func handle() error {
196203
glog.V(4).Infof("Set Kubernetes feature gates: %v", *kubeFeatureGates)
197204
}
198205

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)
202219
}
220+
203221
}
204222

205223
if *teardownCluster {
206224
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)
210238
}
211239
}()
212240
}
@@ -322,11 +350,21 @@ func runCommand(action string, cmd *exec.Cmd) error {
322350
return nil
323351
}
324352

325-
func clusterDown(k8sDir string) error {
353+
func clusterDownGCE(k8sDir string) error {
326354
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)
328366
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)
330368
}
331369
return nil
332370
}
@@ -340,15 +378,38 @@ func buildKubernetes(k8sDir string) error {
340378
return nil
341379
}
342380

343-
func clusterUp(k8sDir, gceZone string) error {
381+
func clusterUpGCE(k8sDir, gceZone string) error {
344382
err := os.Setenv("KUBE_GCE_ZONE", gceZone)
345383
if err != nil {
346384
return err
347385
}
348386
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)
350411
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)
352413
}
353414

354415
return nil

test/run-k8s-integration-local.sh

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ set -o nounset
44
set -o errexit
55

66
readonly PKGDIR=${GOPATH}/src/sigs.k8s.io/gcp-compute-persistent-disk-csi-driver
7+
readonly deployment_strategy=${DEPLOYMENT_STRATEGY:-gce}
8+
79
source "${PKGDIR}/deploy/common.sh"
810

911
ensure_var GCE_PD_CSI_STAGING_IMAGE
@@ -14,7 +16,8 @@ make -C ${PKGDIR} test-k8s-integration
1416
# ${PKGDIR}/bin/k8s-integration-test --kube-version=master --run-in-prow=false \
1517
# --staging-image=${GCE_PD_CSI_STAGING_IMAGE} --service-account-file=${GCE_PD_SA_DIR}/cloud-sa.json \
1618
# --deploy-overlay-name=dev --storageclass-file=sc-standard.yaml \
17-
# --test-focus="External.Storage" --gce-zone="us-central1-b"
19+
# --test-focus="External.Storage" --gce-zone="us-central1-b" \
20+
# --deployment-strategy=${deployment_strategy}
1821

1922
# This version of the command does not build the driver or K8s, points to a
2023
# local K8s repo to get the e2e.test binary, and does not bring up or down the cluster

test/run-k8s-integration.sh

+3-1
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@ readonly PKGDIR=${GOPATH}/src/sigs.k8s.io/gcp-compute-persistent-disk-csi-driver
1313
readonly overlay_name="${GCE_PD_OVERLAY_NAME:-stable}"
1414
readonly boskos_resource_type="${GCE_PD_BOSKOS_RESOURCE_TYPE:-gce-project}"
1515
readonly do_driver_build="${GCE_PD_DO_DRIVER_BUILD:-true}"
16+
readonly deployment_strategy=${DEPLOYMENT_STRATEGY:-gce}
1617
export GCE_PD_VERBOSITY=9
1718

1819
make -C ${PKGDIR} test-k8s-integration
1920
${PKGDIR}/bin/k8s-integration-test --kube-version=${GCE_PD_KUBE_VERSION:-master} \
2021
--run-in-prow=true --deploy-overlay-name=${overlay_name} --service-account-file=${E2E_GOOGLE_APPLICATION_CREDENTIALS} \
2122
--do-driver-build=${do_driver_build} --boskos-resource-type=${boskos_resource_type} \
22-
--storageclass-file=sc-standard.yaml --test-focus="External.Storage" --gce-zone="us-central1-b"
23+
--storageclass-file=sc-standard.yaml --test-focus="External.Storage" --gce-zone="us-central1-b" \
24+
--deployment-strategy=${deployment_strategy}

0 commit comments

Comments
 (0)