From bba211e04bd0737a41c4dac58172530a55c402b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danka=20Niedzia=C5=82kowska?= Date: Fri, 15 Apr 2016 13:56:45 -0700 Subject: [PATCH 1/2] Test for GKE local SSD --- test/e2e/gke_local_ssd.go | 107 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 test/e2e/gke_local_ssd.go diff --git a/test/e2e/gke_local_ssd.go b/test/e2e/gke_local_ssd.go new file mode 100644 index 00000000000..df4e038ec4c --- /dev/null +++ b/test/e2e/gke_local_ssd.go @@ -0,0 +1,107 @@ +/* +Copyright 2015 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package e2e + +import ( + "fmt" + "os/exec" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/apimachinery/registered" + "k8s.io/kubernetes/pkg/util" + "k8s.io/kubernetes/test/e2e/framework" + + . "github.com/onsi/ginkgo" +) + +var _ = framework.KubeDescribe("GKE local SSD [Feature:GKELocalSSD]", func() { + + f := framework.NewDefaultFramework("localssd") + + It("should write and read from node local SSD [Feature:GKELocalSSD]", func() { + framework.Logf("Start local SSD test") + createNodePoolWithLocalSsds("np-ssd") + doTestWriteAndReadToLocalSsd(f) + }) +}) + +func createNodePoolWithLocalSsds(nodePoolName string) { + framework.Logf("Create node pool: %s with local SSDs in cluster: %s ", + nodePoolName, framework.TestContext.CloudConfig.Cluster) + out, err := exec.Command("gcloud", "alpha", "container", "node-pools", "create", + nodePoolName, + fmt.Sprintf("--cluster=%s", framework.TestContext.CloudConfig.Cluster), + "--local-ssd-count=1").Output() + if err != nil { + framework.Failf("Failed to create node pool %s: %v", nodePoolName, err) + } + framework.Logf("Successfully created node pool %s: %v", nodePoolName, out) +} + +func doTestWriteAndReadToLocalSsd(f *framework.Framework) { + var pod = testPodWithSsd("echo 'hello world' > /mnt/ssd0/data && sleep 1 && cat /mnt/ssd0/data") + var msg string + var out = []string{"hello world"} + + f.TestContainerOutput(msg, pod, 0, out) +} + +func testPodWithSsd(command string) *api.Pod { + containerName := "test-container" + volumeName := "test-ssd-volume" + path := "/mnt/ssd0" + podName := "pod-" + string(util.NewUUID()) + image := "ubuntu:14.04" + return &api.Pod{ + TypeMeta: unversioned.TypeMeta{ + Kind: "Pod", + APIVersion: registered.GroupOrDie(api.GroupName).GroupVersion.String(), + }, + ObjectMeta: api.ObjectMeta{ + Name: podName, + }, + Spec: api.PodSpec{ + Containers: []api.Container{ + { + Name: containerName, + Image: image, + Command: []string{"/bin/sh"}, + Args: []string{"-c", command}, + VolumeMounts: []api.VolumeMount{ + { + Name: volumeName, + MountPath: path, + }, + }, + }, + }, + RestartPolicy: api.RestartPolicyNever, + Volumes: []api.Volume{ + { + Name: volumeName, + VolumeSource: api.VolumeSource{ + HostPath: &api.HostPathVolumeSource{ + Path: path, + }, + }, + }, + }, + NodeSelector: map[string]string{"cloud.google.com/gke-local-ssd": "true"}, + }, + } +} From e676fc55f102534907107306f94837792697ea40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danka=20Niedzia=C5=82kowska?= Date: Thu, 19 May 2016 11:04:23 -0700 Subject: [PATCH 2/2] Update gke_local_ssd.go --- test/e2e/gke_local_ssd.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/gke_local_ssd.go b/test/e2e/gke_local_ssd.go index df4e038ec4c..956ade38405 100644 --- a/test/e2e/gke_local_ssd.go +++ b/test/e2e/gke_local_ssd.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.