From 72a27daa3c99e910d5d80741c9b2e8afce25e8dd Mon Sep 17 00:00:00 2001 From: Miao Luo Date: Wed, 22 Feb 2017 17:59:36 -0800 Subject: [PATCH] Adds fstype support in storage class for Photon Cloud Provider. --- BUILD.bazel | 1 - cmd/BUILD | 1 - federation/apis/core/BUILD | 5 +- pkg/api/BUILD | 2 - pkg/kubeapiserver/BUILD | 4 - pkg/volume/photon_pd/photon_pd.go | 10 +- pkg/volume/photon_pd/photon_pd_test.go | 4 +- pkg/volume/photon_pd/photon_util.go | 13 +- .../vsphere_volume/vsphere_volume_util.go | 2 +- plugin/pkg/scheduler/BUILD | 26 +--- test/e2e/BUILD | 1 - test/e2e/vsphere_volume_fstype.go | 129 ------------------ vendor/BUILD | 9 -- 13 files changed, 21 insertions(+), 186 deletions(-) delete mode 100644 test/e2e/vsphere_volume_fstype.go diff --git a/BUILD.bazel b/BUILD.bazel index 4f86c174b52..6ab284d64cd 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -46,7 +46,6 @@ filegroup( "//hack:all-srcs", "//pkg:all-srcs", "//plugin:all-srcs", - "//src/gopkg.in/mikedanese/gazel.v14:all-srcs", "//test:all-srcs", "//third_party:all-srcs", "//vendor:all-srcs", diff --git a/cmd/BUILD b/cmd/BUILD index 0f76e212126..1b3b8749c3b 100644 --- a/cmd/BUILD +++ b/cmd/BUILD @@ -24,7 +24,6 @@ filegroup( "//cmd/genyaml:all-srcs", "//cmd/gke-certificates-controller:all-srcs", "//cmd/hyperkube:all-srcs", - "//cmd/kube-aggregator:all-srcs", "//cmd/kube-apiserver:all-srcs", "//cmd/kube-controller-manager:all-srcs", "//cmd/kube-proxy:all-srcs", diff --git a/federation/apis/core/BUILD b/federation/apis/core/BUILD index e16cca85f94..bfea44162bd 100644 --- a/federation/apis/core/BUILD +++ b/federation/apis/core/BUILD @@ -9,10 +9,7 @@ load( go_library( name = "go_default_library", - srcs = [ - "conversion.go", - "register.go", - ], + srcs = ["register.go"], tags = ["automanaged"], deps = [ "//pkg/api:go_default_library", diff --git a/pkg/api/BUILD b/pkg/api/BUILD index 251f2a447f3..5e6f7c804b7 100644 --- a/pkg/api/BUILD +++ b/pkg/api/BUILD @@ -11,7 +11,6 @@ load( go_library( name = "go_default_library", srcs = [ - "conversion.go", "defaults.go", "doc.go", "field_constants.go", @@ -25,7 +24,6 @@ go_library( ], tags = ["automanaged"], deps = [ - "//pkg/util/labels:go_default_library", "//vendor:github.com/davecgh/go-spew/spew", "//vendor:k8s.io/apimachinery/pkg/api/meta", "//vendor:k8s.io/apimachinery/pkg/api/resource", diff --git a/pkg/kubeapiserver/BUILD b/pkg/kubeapiserver/BUILD index 384798864f5..1cf2c61888f 100644 --- a/pkg/kubeapiserver/BUILD +++ b/pkg/kubeapiserver/BUILD @@ -13,16 +13,12 @@ go_library( srcs = [ "default_storage_factory_builder.go", "doc.go", - "rest.go", ], tags = ["automanaged"], deps = [ "//pkg/api:go_default_library", "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apimachinery/pkg/runtime/schema", - "//vendor:k8s.io/apiserver/pkg/registry/generic", - "//vendor:k8s.io/apiserver/pkg/registry/generic/registry", - "//vendor:k8s.io/apiserver/pkg/server", "//vendor:k8s.io/apiserver/pkg/server/storage", "//vendor:k8s.io/apiserver/pkg/storage/storagebackend", "//vendor:k8s.io/apiserver/pkg/util/flag", diff --git a/pkg/volume/photon_pd/photon_pd.go b/pkg/volume/photon_pd/photon_pd.go index 606c57b1a93..c3d1d0287fb 100644 --- a/pkg/volume/photon_pd/photon_pd.go +++ b/pkg/volume/photon_pd/photon_pd.go @@ -151,7 +151,7 @@ func (plugin *photonPersistentDiskPlugin) ConstructVolumeSpec(volumeSpecName, mo // Abstract interface to disk operations. type pdManager interface { // Creates a volume - CreateVolume(provisioner *photonPersistentDiskProvisioner) (pdID string, volumeSizeGB int, err error) + CreateVolume(provisioner *photonPersistentDiskProvisioner) (pdID string, volumeSizeGB int, fstype string, err error) // Deletes a volume DeleteVolume(deleter *photonPersistentDiskDeleter) error } @@ -342,11 +342,15 @@ func (plugin *photonPersistentDiskPlugin) newProvisionerInternal(options volume. } func (p *photonPersistentDiskProvisioner) Provision() (*v1.PersistentVolume, error) { - pdID, sizeGB, err := p.manager.CreateVolume(p) + pdID, sizeGB, fstype, err := p.manager.CreateVolume(p) if err != nil { return nil, err } + if fstype == "" { + fstype = "ext4" + } + pv := &v1.PersistentVolume{ ObjectMeta: metav1.ObjectMeta{ Name: p.options.PVName, @@ -364,7 +368,7 @@ func (p *photonPersistentDiskProvisioner) Provision() (*v1.PersistentVolume, err PersistentVolumeSource: v1.PersistentVolumeSource{ PhotonPersistentDisk: &v1.PhotonPersistentDiskVolumeSource{ PdID: pdID, - FSType: "ext4", + FSType: fstype, }, }, }, diff --git a/pkg/volume/photon_pd/photon_pd_test.go b/pkg/volume/photon_pd/photon_pd_test.go index 2d843542b7e..3484aa3f5b3 100644 --- a/pkg/volume/photon_pd/photon_pd_test.go +++ b/pkg/volume/photon_pd/photon_pd_test.go @@ -88,8 +88,8 @@ func contains(modes []v1.PersistentVolumeAccessMode, mode v1.PersistentVolumeAcc type fakePDManager struct { } -func (fake *fakePDManager) CreateVolume(c *photonPersistentDiskProvisioner) (pdID string, volumeSizeGB int, err error) { - return "test-photon-pd-id", 10, nil +func (fake *fakePDManager) CreateVolume(c *photonPersistentDiskProvisioner) (pdID string, volumeSizeGB int, fstype string, err error) { + return "test-photon-pd-id", 10, "ext4", nil } func (fake *fakePDManager) DeleteVolume(cd *photonPersistentDiskDeleter) error { diff --git a/pkg/volume/photon_pd/photon_util.go b/pkg/volume/photon_pd/photon_util.go index f3c1936645d..1963f37b52f 100644 --- a/pkg/volume/photon_pd/photon_util.go +++ b/pkg/volume/photon_pd/photon_util.go @@ -80,11 +80,11 @@ func verifyDevicePath(path string) (string, error) { } // CreateVolume creates a PhotonController persistent disk. -func (util *PhotonDiskUtil) CreateVolume(p *photonPersistentDiskProvisioner) (pdID string, capacityGB int, err error) { +func (util *PhotonDiskUtil) CreateVolume(p *photonPersistentDiskProvisioner) (pdID string, capacityGB int, fstype string, err error) { cloud, err := getCloudProvider(p.plugin.host.GetCloudProvider()) if err != nil { glog.Errorf("Photon Controller Util: CreateVolume failed to get cloud provider. Error [%v]", err) - return "", 0, err + return "", 0, "", err } capacity := p.options.PVC.Spec.Resources.Requests[v1.ResourceName(v1.ResourceStorage)] @@ -102,20 +102,23 @@ func (util *PhotonDiskUtil) CreateVolume(p *photonPersistentDiskProvisioner) (pd switch strings.ToLower(parameter) { case "flavor": volumeOptions.Flavor = value + case "fstype": + fstype = value + glog.V(4).Infof("Photon Controller Util: Setting fstype to %s", fstype) default: glog.Errorf("Photon Controller Util: invalid option %s for volume plugin %s.", parameter, p.plugin.GetPluginName()) - return "", 0, fmt.Errorf("Photon Controller Util: invalid option %s for volume plugin %s.", parameter, p.plugin.GetPluginName()) + return "", 0, "", fmt.Errorf("Photon Controller Util: invalid option %s for volume plugin %s.", parameter, p.plugin.GetPluginName()) } } pdID, err = cloud.CreateDisk(volumeOptions) if err != nil { glog.Errorf("Photon Controller Util: failed to CreateDisk. Error [%v]", err) - return "", 0, err + return "", 0, "", err } glog.V(4).Infof("Successfully created Photon Controller persistent disk %s", name) - return pdID, volSizeGB, nil + return pdID, volSizeGB, "", nil } // DeleteVolume deletes a vSphere volume. diff --git a/pkg/volume/vsphere_volume/vsphere_volume_util.go b/pkg/volume/vsphere_volume/vsphere_volume_util.go index 1b8fe52f788..7f97dda56b2 100644 --- a/pkg/volume/vsphere_volume/vsphere_volume_util.go +++ b/pkg/volume/vsphere_volume/vsphere_volume_util.go @@ -38,7 +38,7 @@ const ( diskSCSIPrefix = "wwn-0x" diskformat = "diskformat" datastore = "datastore" - Fstype = "fstype" + Fstype = "fstype" HostFailuresToTolerateCapability = "hostfailurestotolerate" ForceProvisioningCapability = "forceprovisioning" diff --git a/plugin/pkg/scheduler/BUILD b/plugin/pkg/scheduler/BUILD index fe29a863552..f318e480ec5 100644 --- a/plugin/pkg/scheduler/BUILD +++ b/plugin/pkg/scheduler/BUILD @@ -10,23 +10,15 @@ load( go_test( name = "go_default_test", - srcs = [ - "extender_test.go", - "generic_scheduler_test.go", - "scheduler_test.go", - ], + srcs = ["scheduler_test.go"], library = ":go_default_library", tags = ["automanaged"], deps = [ "//pkg/api:go_default_library", "//pkg/api/testapi:go_default_library", "//pkg/api/v1:go_default_library", - "//pkg/apis/extensions/v1beta1:go_default_library", "//plugin/pkg/scheduler/algorithm:go_default_library", "//plugin/pkg/scheduler/algorithm/predicates:go_default_library", - "//plugin/pkg/scheduler/algorithm/priorities:go_default_library", - "//plugin/pkg/scheduler/algorithm/priorities/util:go_default_library", - "//plugin/pkg/scheduler/api:go_default_library", "//plugin/pkg/scheduler/core:go_default_library", "//plugin/pkg/scheduler/schedulercache:go_default_library", "//plugin/pkg/scheduler/testing:go_default_library", @@ -34,7 +26,6 @@ go_test( "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/labels", "//vendor:k8s.io/apimachinery/pkg/util/diff", - "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", @@ -44,37 +35,24 @@ go_test( go_library( name = "go_default_library", - srcs = [ - "equivalence_cache.go", - "extender.go", - "generic_scheduler.go", - "scheduler.go", - ], + srcs = ["scheduler.go"], tags = ["automanaged"], deps = [ "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/listers/core/v1:go_default_library", - "//pkg/util/hash:go_default_library", "//plugin/pkg/scheduler/algorithm:go_default_library", - "//plugin/pkg/scheduler/algorithm/predicates:go_default_library", "//plugin/pkg/scheduler/api:go_default_library", "//plugin/pkg/scheduler/core:go_default_library", "//plugin/pkg/scheduler/metrics:go_default_library", "//plugin/pkg/scheduler/schedulercache:go_default_library", "//plugin/pkg/scheduler/util:go_default_library", "//vendor:github.com/golang/glog", - "//vendor:github.com/golang/groupcache/lru", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", - "//vendor:k8s.io/apimachinery/pkg/util/errors", - "//vendor:k8s.io/apimachinery/pkg/util/net", "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/apimachinery/pkg/util/wait", - "//vendor:k8s.io/apiserver/pkg/util/trace", - "//vendor:k8s.io/client-go/rest", "//vendor:k8s.io/client-go/tools/cache", "//vendor:k8s.io/client-go/tools/record", - "//vendor:k8s.io/client-go/util/workqueue", ], ) diff --git a/test/e2e/BUILD b/test/e2e/BUILD index 0e89ae7f6bb..6e8ae7d4d1b 100644 --- a/test/e2e/BUILD +++ b/test/e2e/BUILD @@ -89,7 +89,6 @@ go_library( "volumes.go", "vsphere_utils.go", "vsphere_volume_diskformat.go", - "vsphere_volume_fstype.go", "vsphere_volume_ops_storm.go", "vsphere_volume_placement.go", ], diff --git a/test/e2e/vsphere_volume_fstype.go b/test/e2e/vsphere_volume_fstype.go deleted file mode 100644 index 24e90d7f515..00000000000 --- a/test/e2e/vsphere_volume_fstype.go +++ /dev/null @@ -1,129 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -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 ( - "time" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - k8stype "k8s.io/apimachinery/pkg/types" - "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/cloudprovider/providers/vsphere" - "k8s.io/kubernetes/test/e2e/framework" -) - -/* - Test to verify fstype specified in storage-class is being honored after volume creation. - - Steps - 1. Create StorageClass with fstype set to valid type (default case included). - 2. Create PVC which uses the StorageClass created in step 1. - 3. Wait for PV to be provisioned. - 4. Wait for PVC's status to become Bound. - 5. Create pod using PVC on specific node. - 6. Wait for Disk to be attached to the node. - 7. Execute command in the pod to get fstype. - 8. Delete pod and Wait for Volume Disk to be detached from the Node. - 9. Delete PVC, PV and Storage Class. -*/ - -var _ = framework.KubeDescribe("Volume fstype [Volume]", func() { - f := framework.NewDefaultFramework("volume-fstype") - var ( - client clientset.Interface - namespace string - ) - BeforeEach(func() { - framework.SkipUnlessProviderIs("vsphere") - client = f.ClientSet - namespace = f.Namespace.Name - nodeList := framework.GetReadySchedulableNodesOrDie(f.ClientSet) - if len(nodeList.Items) == 0 { - framework.Failf("Unable to find ready and schedulable Node") - } - }) - - It("verify fstype - ext3 formatted volume", func() { - By("Invoking Test for fstype: ext3") - invokeTestForFstype(client, namespace, "ext3", "ext3") - }) - - It("verify disk format type - default value should be ext4", func() { - By("Invoking Test for fstype: Default Value") - invokeTestForFstype(client, namespace, "", "ext4") - }) -}) - -func invokeTestForFstype(client clientset.Interface, namespace string, fstype string, expectedContent string) { - - framework.Logf("Invoking Test for fstype: %s", fstype) - scParameters := make(map[string]string) - scParameters["fstype"] = fstype - - By("Creating Storage Class With Fstype") - storageClassSpec := getVSphereStorageClassSpec("fstype", scParameters) - storageclass, err := client.StorageV1beta1().StorageClasses().Create(storageClassSpec) - Expect(err).NotTo(HaveOccurred()) - - defer client.StorageV1beta1().StorageClasses().Delete(storageclass.Name, nil) - - By("Creating PVC using the Storage Class") - pvclaimSpec := getVSphereClaimSpecWithStorageClassAnnotation(namespace, storageclass) - pvclaim, err := client.CoreV1().PersistentVolumeClaims(namespace).Create(pvclaimSpec) - Expect(err).NotTo(HaveOccurred()) - - defer func() { - client.CoreV1().PersistentVolumeClaims(namespace).Delete(pvclaimSpec.Name, nil) - }() - - By("Waiting for claim to be in bound phase") - err = framework.WaitForPersistentVolumeClaimPhase(v1.ClaimBound, client, pvclaim.Namespace, pvclaim.Name, framework.Poll, framework.ClaimProvisionTimeout) - Expect(err).NotTo(HaveOccurred()) - - // Get new copy of the claim - pvclaim, err = client.CoreV1().PersistentVolumeClaims(pvclaim.Namespace).Get(pvclaim.Name, metav1.GetOptions{}) - Expect(err).NotTo(HaveOccurred()) - - // Get the bound PV - pv, err := client.CoreV1().PersistentVolumes().Get(pvclaim.Spec.VolumeName, metav1.GetOptions{}) - Expect(err).NotTo(HaveOccurred()) - - By("Creating pod to attach PV to the node") - // Create pod to attach Volume to Node - podSpec := getVSpherePodSpecWithClaim(pvclaim.Name, nil, "/bin/df -T /mnt/test | /bin/awk 'FNR == 2 {print $2}' > /mnt/test/fstype && while true ; do sleep 2 ; done") - pod, err := client.CoreV1().Pods(namespace).Create(podSpec) - Expect(err).NotTo(HaveOccurred()) - - By("Waiting for pod to be running") - Expect(framework.WaitForPodNameRunningInNamespace(client, pod.Name, namespace)).To(Succeed()) - - pod, err = client.CoreV1().Pods(namespace).Get(pod.Name, metav1.GetOptions{}) - Expect(err).NotTo(HaveOccurred()) - - // Asserts: Right disk is attached to the pod - vsp, err := vsphere.GetVSphere() - Expect(err).NotTo(HaveOccurred()) - verifyVSphereDiskAttached(vsp, pv.Spec.VsphereVolume.VolumePath, k8stype.NodeName(pod.Spec.NodeName)) - - _, err = framework.LookForStringInPodExec(namespace, pod.Name, []string{"/bin/cat", "/mnt/test/fstype"}, expectedContent, time.Minute) - By("Delete pod and wait for volume to be detached from node") - deletePodAndWaitForVolumeToDetach(client, namespace, vsp, pod.Spec.NodeName, pod, pv.Spec.VsphereVolume.VolumePath) - -} diff --git a/vendor/BUILD b/vendor/BUILD index 782d5f52c41..308c4eb0d78 100644 --- a/vendor/BUILD +++ b/vendor/BUILD @@ -10524,8 +10524,6 @@ go_test( "//vendor:github.com/stretchr/testify/assert", "//vendor:k8s.io/apimachinery/pkg/api/meta", "//vendor:k8s.io/apimachinery/pkg/apimachinery", - "//vendor:k8s.io/apimachinery/pkg/apimachinery/announced", - "//vendor:k8s.io/apimachinery/pkg/apimachinery/registered", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/openapi", "//vendor:k8s.io/apimachinery/pkg/runtime", @@ -10535,7 +10533,6 @@ go_test( "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/apimachinery/pkg/version", "//vendor:k8s.io/apiserver/pkg/apis/example", - "//vendor:k8s.io/apiserver/pkg/apis/example/install", "//vendor:k8s.io/apiserver/pkg/apis/example/v1", "//vendor:k8s.io/apiserver/pkg/authentication/user", "//vendor:k8s.io/apiserver/pkg/authorization/authorizer", @@ -10544,7 +10541,6 @@ go_test( "//vendor:k8s.io/apiserver/pkg/server/healthz", "//vendor:k8s.io/apiserver/pkg/server/mux", "//vendor:k8s.io/apiserver/pkg/storage/etcd/testing", - "//vendor:k8s.io/apiserver/pkg/storage/storagebackend", "//vendor:k8s.io/client-go/rest", ], ) @@ -10559,10 +10555,7 @@ go_library( "k8s.io/apiserver/pkg/server/genericapiserver.go", "k8s.io/apiserver/pkg/server/healthz.go", "k8s.io/apiserver/pkg/server/hooks.go", - "k8s.io/apiserver/pkg/server/resource_config.go", - "k8s.io/apiserver/pkg/server/resource_encoding_config.go", "k8s.io/apiserver/pkg/server/serve.go", - "k8s.io/apiserver/pkg/server/storage_factory.go", ], tags = ["automanaged"], deps = [ @@ -10580,7 +10573,6 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apimachinery/pkg/runtime/schema", "//vendor:k8s.io/apimachinery/pkg/runtime/serializer", - "//vendor:k8s.io/apimachinery/pkg/runtime/serializer/recognizer", "//vendor:k8s.io/apimachinery/pkg/util/net", "//vendor:k8s.io/apimachinery/pkg/util/runtime", "//vendor:k8s.io/apimachinery/pkg/util/sets", @@ -10605,7 +10597,6 @@ go_library( "//vendor:k8s.io/apiserver/pkg/server/healthz", "//vendor:k8s.io/apiserver/pkg/server/mux", "//vendor:k8s.io/apiserver/pkg/server/routes", - "//vendor:k8s.io/apiserver/pkg/storage/storagebackend", "//vendor:k8s.io/client-go/rest", "//vendor:k8s.io/client-go/util/cert", ],