Skip to content

Commit d482b03

Browse files
committed
Add gke regional cluster support to k8s-integration test
1 parent 95946b4 commit d482b03

File tree

3 files changed

+64
-24
lines changed

3 files changed

+64
-24
lines changed

test/k8s-integration/cluster.go

+39-8
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,19 @@ func clusterDownGCE(k8sDir string) error {
1919
return nil
2020
}
2121

22-
func clusterDownGKE(gceZone string) error {
22+
func clusterDownGKE(gceZone, gceRegion string) error {
23+
var locationArg, locationVal string
24+
switch {
25+
case len(gceZone) > 0:
26+
locationArg = "--zone"
27+
locationVal = gceZone
28+
case len(gceRegion) > 0:
29+
locationArg = "--region"
30+
locationVal = gceRegion
31+
}
32+
2333
cmd := exec.Command("gcloud", "container", "clusters", "delete", gkeTestClusterName,
24-
"--zone", gceZone, "--quiet")
34+
locationArg, locationVal, "--quiet")
2535
err := runCommand("Bringing Down E2E Cluster on GKE", cmd)
2636
if err != nil {
2737
return fmt.Errorf("failed to bring down kubernetes e2e cluster on gke: %v", err)
@@ -77,21 +87,32 @@ func clusterUpGCE(k8sDir, gceZone string, numNodes int) error {
7787
return nil
7888
}
7989

80-
func clusterUpGKE(gceZone string, numNodes int) error {
81-
out, err := exec.Command("gcloud", "container", "clusters", "list", "--zone", gceZone,
90+
func clusterUpGKE(gceZone, gceRegion string, numNodes int) error {
91+
var locationArg, locationVal string
92+
switch {
93+
case len(gceZone) > 0:
94+
locationArg = "--zone"
95+
locationVal = gceZone
96+
case len(gceRegion) > 0:
97+
locationArg = "--region"
98+
locationVal = gceRegion
99+
}
100+
101+
out, err := exec.Command("gcloud", "container", "clusters", "list", locationArg, locationVal,
82102
"--filter", fmt.Sprintf("name=%s", gkeTestClusterName)).CombinedOutput()
103+
83104
if err != nil {
84105
return fmt.Errorf("failed to check for previous test cluster: %v %s", err, out)
85106
}
86107
if len(out) > 0 {
87108
klog.Infof("Detected previous cluster %s. Deleting so a new one can be created...", gkeTestClusterName)
88-
err = clusterDownGKE(gceZone)
109+
err = clusterDownGKE(gceZone, gceRegion)
89110
if err != nil {
90111
return err
91112
}
92113
}
93114
cmd := exec.Command("gcloud", "container", "clusters", "create", gkeTestClusterName,
94-
"--zone", gceZone, "--cluster-version", *gkeClusterVer, "--num-nodes", strconv.Itoa(numNodes),
115+
locationArg, locationVal, "--cluster-version", *gkeClusterVer, "--num-nodes", strconv.Itoa(numNodes),
95116
"--quiet", "--machine-type", "n1-standard-2")
96117
err = runCommand("Staring E2E Cluster on GKE", cmd)
97118
if err != nil {
@@ -157,7 +178,17 @@ func downloadKubernetesSource(pkgDir, k8sIoDir, kubeVersion string) error {
157178
return nil
158179
}
159180

160-
func getGKEKubeTestArgs() ([]string, error) {
181+
func getGKEKubeTestArgs(gceZone, gceRegion string) ([]string, error) {
182+
var locationArg, locationVal string
183+
switch {
184+
case len(gceZone) > 0:
185+
locationArg = "--gcp-zone"
186+
locationVal = gceZone
187+
case len(gceRegion) > 0:
188+
locationArg = "--gcp-region"
189+
locationVal = gceRegion
190+
}
191+
161192
var gkeEnv string
162193
switch gkeURL := os.Getenv("CLOUDSDK_API_ENDPOINT_OVERRIDES_CONTAINER"); gkeURL {
163194
case "https://staging-container.sandbox.googleapis.com/":
@@ -189,7 +220,7 @@ func getGKEKubeTestArgs() ([]string, error) {
189220
"--gcp-network=default",
190221
fmt.Sprintf("--cluster=%s", gkeTestClusterName),
191222
fmt.Sprintf("--gke-environment=%s", gkeEnv),
192-
fmt.Sprintf("--gcp-zone=%s", *gceZone),
223+
fmt.Sprintf("%s=%s", locationArg, locationVal),
193224
fmt.Sprintf("--gcp-project=%s", project[:len(project)-1]),
194225
}
195226

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)