Skip to content

Commit 45e7aeb

Browse files
authored
Merge pull request #394 from msau42/regional-tests
Add gke regional cluster support to k8s-integration test
2 parents 95946b4 + 9ffbf51 commit 45e7aeb

File tree

3 files changed

+69
-25
lines changed

3 files changed

+69
-25
lines changed

test/k8s-integration/cluster.go

+44-9
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,20 @@ import (
1010
"k8s.io/klog"
1111
)
1212

13+
func gkeLocationArgs(gceZone, gceRegion string) (locationArg, locationVal string, err error) {
14+
switch {
15+
case len(gceZone) > 0:
16+
locationArg = "--zone"
17+
locationVal = gceZone
18+
case len(gceRegion) > 0:
19+
locationArg = "--region"
20+
locationVal = gceRegion
21+
default:
22+
return "", "", fmt.Errorf("zone and region unspecified")
23+
}
24+
return
25+
}
26+
1327
func clusterDownGCE(k8sDir string) error {
1428
cmd := exec.Command(filepath.Join(k8sDir, "hack", "e2e-internal", "e2e-down.sh"))
1529
err := runCommand("Bringing Down E2E Cluster on GCE", cmd)
@@ -19,10 +33,15 @@ func clusterDownGCE(k8sDir string) error {
1933
return nil
2034
}
2135

22-
func clusterDownGKE(gceZone string) error {
36+
func clusterDownGKE(gceZone, gceRegion string) error {
37+
locationArg, locationVal, err := gkeLocationArgs(gceZone, gceRegion)
38+
if err != nil {
39+
return err
40+
}
41+
2342
cmd := exec.Command("gcloud", "container", "clusters", "delete", gkeTestClusterName,
24-
"--zone", gceZone, "--quiet")
25-
err := runCommand("Bringing Down E2E Cluster on GKE", cmd)
43+
locationArg, locationVal, "--quiet")
44+
err = runCommand("Bringing Down E2E Cluster on GKE", cmd)
2645
if err != nil {
2746
return fmt.Errorf("failed to bring down kubernetes e2e cluster on gke: %v", err)
2847
}
@@ -77,21 +96,27 @@ func clusterUpGCE(k8sDir, gceZone string, numNodes int) error {
7796
return nil
7897
}
7998

80-
func clusterUpGKE(gceZone string, numNodes int) error {
81-
out, err := exec.Command("gcloud", "container", "clusters", "list", "--zone", gceZone,
99+
func clusterUpGKE(gceZone, gceRegion string, numNodes int) error {
100+
locationArg, locationVal, err := gkeLocationArgs(gceZone, gceRegion)
101+
if err != nil {
102+
return err
103+
}
104+
105+
out, err := exec.Command("gcloud", "container", "clusters", "list", locationArg, locationVal,
82106
"--filter", fmt.Sprintf("name=%s", gkeTestClusterName)).CombinedOutput()
107+
83108
if err != nil {
84109
return fmt.Errorf("failed to check for previous test cluster: %v %s", err, out)
85110
}
86111
if len(out) > 0 {
87112
klog.Infof("Detected previous cluster %s. Deleting so a new one can be created...", gkeTestClusterName)
88-
err = clusterDownGKE(gceZone)
113+
err = clusterDownGKE(gceZone, gceRegion)
89114
if err != nil {
90115
return err
91116
}
92117
}
93118
cmd := exec.Command("gcloud", "container", "clusters", "create", gkeTestClusterName,
94-
"--zone", gceZone, "--cluster-version", *gkeClusterVer, "--num-nodes", strconv.Itoa(numNodes),
119+
locationArg, locationVal, "--cluster-version", *gkeClusterVer, "--num-nodes", strconv.Itoa(numNodes),
95120
"--quiet", "--machine-type", "n1-standard-2")
96121
err = runCommand("Staring E2E Cluster on GKE", cmd)
97122
if err != nil {
@@ -157,7 +182,17 @@ func downloadKubernetesSource(pkgDir, k8sIoDir, kubeVersion string) error {
157182
return nil
158183
}
159184

160-
func getGKEKubeTestArgs() ([]string, error) {
185+
func getGKEKubeTestArgs(gceZone, gceRegion string) ([]string, error) {
186+
var locationArg, locationVal string
187+
switch {
188+
case len(gceZone) > 0:
189+
locationArg = "--gcp-zone"
190+
locationVal = gceZone
191+
case len(gceRegion) > 0:
192+
locationArg = "--gcp-region"
193+
locationVal = gceRegion
194+
}
195+
161196
var gkeEnv string
162197
switch gkeURL := os.Getenv("CLOUDSDK_API_ENDPOINT_OVERRIDES_CONTAINER"); gkeURL {
163198
case "https://staging-container.sandbox.googleapis.com/":
@@ -189,7 +224,7 @@ func getGKEKubeTestArgs() ([]string, error) {
189224
"--gcp-network=default",
190225
fmt.Sprintf("--cluster=%s", gkeTestClusterName),
191226
fmt.Sprintf("--gke-environment=%s", gkeEnv),
192-
fmt.Sprintf("--gcp-zone=%s", *gceZone),
227+
fmt.Sprintf("%s=%s", locationArg, locationVal),
193228
fmt.Sprintf("--gcp-project=%s", project[:len(project)-1]),
194229
}
195230

test/k8s-integration/config/test-config-template.in

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ DriverInfo:
1717
fsGroup: true
1818
exec: true
1919
block: true
20+
topology: true
2021
# dataSource: true
2122
# RWX: true
2223
SupportedMountOption:

test/k8s-integration/main.go

+24-16
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,15 @@ var (
3434
teardownDriver = flag.Bool("teardown-driver", true, "teardown the driver after the e2e test")
3535
bringupCluster = flag.Bool("bringup-cluster", true, "build kubernetes and bringup a cluster")
3636
gceZone = flag.String("gce-zone", "", "zone that the gce k8s cluster is created/found in")
37+
gceRegion = flag.String("gce-region", "", "region that gke regional cluster should be created in")
3738
kubeVersion = flag.String("kube-version", "", "version of Kubernetes to download and use for the cluster")
3839
testVersion = flag.String("test-version", "", "version of Kubernetes to download and use for tests")
3940
kubeFeatureGates = flag.String("kube-feature-gates", "", "feature gates to set on new kubernetes cluster")
4041
localK8sDir = flag.String("local-k8s-dir", "", "local prebuilt kubernetes/kubernetes directory to use for cluster and test binaries")
41-
deploymentStrat = flag.String("deployment-strategy", "", "choose between deploying on gce or gke")
42+
deploymentStrat = flag.String("deployment-strategy", "gce", "choose between deploying on gce or gke")
4243
gkeClusterVer = flag.String("gke-cluster-version", "", "version of Kubernetes master and node for gke")
4344
numNodes = flag.Int("num-nodes", -1, "the number of nodes in the test cluster")
45+
4446
// Test infrastructure flags
4547
boskosResourceType = flag.String("boskos-resource-type", "gce-project", "name of the boskos resource type to reserve")
4648
storageClassFile = flag.String("storageclass-file", "", "name of storageclass yaml file to use for test relative to test/k8s-integration/config")
@@ -78,7 +80,12 @@ func main() {
7880
ensureVariable(saFile, true, "service-account-file is a required flag")
7981
ensureVariable(deployOverlayName, true, "deploy-overlay-name is a required flag")
8082
ensureVariable(testFocus, true, "test-focus is a required flag")
81-
ensureVariable(gceZone, true, "gce-zone is a required flag")
83+
84+
if len(*gceRegion) != 0 {
85+
ensureVariable(gceZone, false, "gce-zone and gce-region cannot both be set")
86+
} else {
87+
ensureVariable(gceZone, true, "One of gce-zone or gce-region must be set")
88+
}
8289

8390
if *migrationTest {
8491
ensureVariable(storageClassFile, false, "storage-class-file and migration-test cannot both be set")
@@ -90,12 +97,6 @@ func main() {
9097
ensureVariable(kubeFeatureGates, false, "kube-feature-gates set but not bringing up new cluster")
9198
}
9299

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.")
97-
}
98-
99100
if *deploymentStrat == "gke" {
100101
ensureFlag(migrationTest, false, "Cannot set deployment strategy to 'gke' for migration tests.")
101102
ensureVariable(kubeVersion, false, "Cannot set kube-version when using deployment strategy 'gke'. Use gke-cluster-version.")
@@ -104,6 +105,9 @@ func main() {
104105
if len(*localK8sDir) == 0 {
105106
ensureVariable(testVersion, true, "Must set either test-version or local k8s dir when using deployment strategy 'gke'.")
106107
}
108+
} else if *deploymentStrat == "gce" {
109+
ensureVariable(gceRegion, false, "regional clusters not supported for 'gce' deployment")
110+
ensureVariable(gceZone, true, "gce-zone required for 'gce' deployment")
107111
}
108112

109113
if len(*localK8sDir) != 0 {
@@ -229,20 +233,14 @@ func handle() error {
229233
testDir = k8sDir
230234
}
231235

232-
var cloudProviderArgs []string
233-
234236
// Create a cluster either through GKE or GCE
235237
if *bringupCluster {
236238
var err error = nil
237239
switch *deploymentStrat {
238240
case "gce":
239241
err = clusterUpGCE(k8sDir, *gceZone, *numNodes)
240242
case "gke":
241-
err = clusterUpGKE(*gceZone, *numNodes)
242-
cloudProviderArgs, err = getGKEKubeTestArgs()
243-
if err != nil {
244-
return fmt.Errorf("failed to build GKE kubetest args: %v", err)
245-
}
243+
err = clusterUpGKE(*gceZone, *gceRegion, *numNodes)
246244
default:
247245
err = fmt.Errorf("deployment-strategy must be set to 'gce' or 'gke', but is: %s", *deploymentStrat)
248246
}
@@ -261,7 +259,7 @@ func handle() error {
261259
klog.Errorf("failed to cluster down: %v", err)
262260
}
263261
case "gke":
264-
err := clusterDownGKE(*gceZone)
262+
err := clusterDownGKE(*gceZone, *gceRegion)
265263
if err != nil {
266264
klog.Errorf("failed to cluster down: %v", err)
267265
}
@@ -285,6 +283,15 @@ func handle() error {
285283
return fmt.Errorf("failed to install CSI Driver: %v", err)
286284
}
287285

286+
var cloudProviderArgs []string
287+
switch *deploymentStrat {
288+
case "gke":
289+
cloudProviderArgs, err = getGKEKubeTestArgs(*gceZone, *gceRegion)
290+
if err != nil {
291+
return fmt.Errorf("failed to build GKE kubetest args: %v", err)
292+
}
293+
}
294+
288295
// Run the tests using the testDir kubernetes
289296
if len(*storageClassFile) != 0 {
290297
err = runCSITests(pkgDir, testDir, *testFocus, *storageClassFile, cloudProviderArgs)
@@ -348,6 +355,7 @@ func runTestsWithConfig(testDir, testFocus, testConfigArg string, cloudProviderA
348355
kubeTestArgs := []string{
349356
"--test",
350357
"--ginkgo-parallel",
358+
"--check-version-skew=false",
351359
fmt.Sprintf("--test_args=%s", testArgs),
352360
}
353361

0 commit comments

Comments
 (0)