From 50c9cca4873085de7cec862aab98e8f80bc19f64 Mon Sep 17 00:00:00 2001 From: Abrar Shivani Date: Mon, 13 Feb 2017 13:49:41 -0800 Subject: [PATCH 1/2] Add support for fstype in Storage Class for vSphere Cloud Provider --- BUILD.bazel | 1 + cmd/BUILD | 1 + .../persistent-volume-provisioning/README.md | 2 + examples/volumes/vsphere/README.md | 56 ++++---- .../vsphere/vsphere-volume-sc-fast.yaml | 3 +- federation/apis/core/BUILD | 5 +- pkg/api/BUILD | 2 + pkg/kubeapiserver/BUILD | 4 + pkg/volume/vsphere_volume/vsphere_volume.go | 10 +- .../vsphere_volume/vsphere_volume_test.go | 4 +- .../vsphere_volume/vsphere_volume_util.go | 20 ++- plugin/pkg/scheduler/BUILD | 26 +++- test/e2e/BUILD | 1 + test/e2e/vsphere_volume_fstype.go | 129 ++++++++++++++++++ vendor/BUILD | 9 ++ 15 files changed, 233 insertions(+), 40 deletions(-) create mode 100644 test/e2e/vsphere_volume_fstype.go diff --git a/BUILD.bazel b/BUILD.bazel index 6ab284d64cd..4f86c174b52 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -46,6 +46,7 @@ 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 1b3b8749c3b..0f76e212126 100644 --- a/cmd/BUILD +++ b/cmd/BUILD @@ -24,6 +24,7 @@ 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/examples/persistent-volume-provisioning/README.md b/examples/persistent-volume-provisioning/README.md index 07de703c503..f31e63ad7e1 100644 --- a/examples/persistent-volume-provisioning/README.md +++ b/examples/persistent-volume-provisioning/README.md @@ -61,9 +61,11 @@ metadata: provisioner: kubernetes.io/vsphere-volume parameters: diskformat: eagerzeroedthick + fstype: ext3 ``` * `diskformat`: `thin`, `zeroedthick` and `eagerzeroedthick`. See vSphere docs for details. Default: `"thin"`. +* `fstype`: fstype that are supported by kubernetes. Default: `"ext4"`. #### Portworx Volume diff --git a/examples/volumes/vsphere/README.md b/examples/volumes/vsphere/README.md index aacb37ff661..d50fbbe37db 100644 --- a/examples/volumes/vsphere/README.md +++ b/examples/volumes/vsphere/README.md @@ -214,6 +214,7 @@ provisioner: kubernetes.io/vsphere-volume parameters: diskformat: zeroedthick + fstype: ext3 ``` [Download example](vsphere-volume-sc-fast.yaml?raw=true) @@ -244,11 +245,12 @@ Verifying storage class is created: ``` bash - $ kubectl describe storageclass fast - Name: fast - Annotations: - Provisioner: kubernetes.io/vsphere-volume - Parameters: diskformat=zeroedthick + $ kubectl describe storageclass fast + Name: fast + IsDefaultClass: No + Annotations: + Provisioner: kubernetes.io/vsphere-volume + Parameters: diskformat=zeroedthick,fstype=ext3 No events. ``` @@ -283,14 +285,19 @@ ``` bash $ kubectl describe pvc pvcsc001 - Name: pvcsc001 - Namespace: default - Status: Bound - Volume: pvc-80f7b5c1-94b6-11e6-a24f-005056a79d2d - Labels: - Capacity: 2Gi - Access Modes: RWO - No events. + Name: pvcsc001 + Namespace: default + StorageClass: fast + Status: Bound + Volume: pvc-83295256-f8e0-11e6-8263-005056b2349c + Labels: + Capacity: 2Gi + Access Modes: RWO + Events: + FirstSeen LastSeen Count From SubObjectPath Type Reason Message + --------- -------- ----- ---- ------------- -------- ------ ------- + 1m 1m 1 persistentvolume-controller Normal ProvisioningSucceeded Successfully provisioned volume pvc-83295256-f8e0-11e6-8263-005056b2349c using kubernetes.io/vsphere-volume + ``` Persistent Volume is automatically created and is bounded to this pvc. @@ -298,19 +305,20 @@ Verifying persistent volume claim is created: ``` bash - $ kubectl describe pv pvc-80f7b5c1-94b6-11e6-a24f-005056a79d2d - Name: pvc-80f7b5c1-94b6-11e6-a24f-005056a79d2d - Labels: - Status: Bound - Claim: default/pvcsc001 - Reclaim Policy: Delete - Access Modes: RWO - Capacity: 2Gi + $ kubectl describe pv pvc-83295256-f8e0-11e6-8263-005056b2349c + Name: pvc-83295256-f8e0-11e6-8263-005056b2349c + Labels: + StorageClass: fast + Status: Bound + Claim: default/pvcsc001 + Reclaim Policy: Delete + Access Modes: RWO + Capacity: 2Gi Message: Source: - Type: vSphereVolume (a Persistent Disk resource in vSphere) - VolumePath: [datastore1] kubevols/kubernetes-dynamic-pvc-80f7b5c1-94b6-11e6-a24f-005056a79d2d.vmdk - FSType: ext4 + Type: vSphereVolume (a Persistent Disk resource in vSphere) + VolumePath: [datastore1] kubevols/kubernetes-dynamic-pvc-83295256-f8e0-11e6-8263-005056b2349c.vmdk + FSType: ext3 No events. ``` diff --git a/examples/volumes/vsphere/vsphere-volume-sc-fast.yaml b/examples/volumes/vsphere/vsphere-volume-sc-fast.yaml index eac5049df04..b2b436f8e0d 100644 --- a/examples/volumes/vsphere/vsphere-volume-sc-fast.yaml +++ b/examples/volumes/vsphere/vsphere-volume-sc-fast.yaml @@ -4,4 +4,5 @@ metadata: name: fast provisioner: kubernetes.io/vsphere-volume parameters: - diskformat: zeroedthick \ No newline at end of file + diskformat: zeroedthick + fstype: ext3 \ No newline at end of file diff --git a/federation/apis/core/BUILD b/federation/apis/core/BUILD index bfea44162bd..e16cca85f94 100644 --- a/federation/apis/core/BUILD +++ b/federation/apis/core/BUILD @@ -9,7 +9,10 @@ load( go_library( name = "go_default_library", - srcs = ["register.go"], + srcs = [ + "conversion.go", + "register.go", + ], tags = ["automanaged"], deps = [ "//pkg/api:go_default_library", diff --git a/pkg/api/BUILD b/pkg/api/BUILD index 5e6f7c804b7..251f2a447f3 100644 --- a/pkg/api/BUILD +++ b/pkg/api/BUILD @@ -11,6 +11,7 @@ load( go_library( name = "go_default_library", srcs = [ + "conversion.go", "defaults.go", "doc.go", "field_constants.go", @@ -24,6 +25,7 @@ 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 1cf2c61888f..384798864f5 100644 --- a/pkg/kubeapiserver/BUILD +++ b/pkg/kubeapiserver/BUILD @@ -13,12 +13,16 @@ 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/vsphere_volume/vsphere_volume.go b/pkg/volume/vsphere_volume/vsphere_volume.go index ac72babe9ec..6fe11e5b4f9 100644 --- a/pkg/volume/vsphere_volume/vsphere_volume.go +++ b/pkg/volume/vsphere_volume/vsphere_volume.go @@ -152,7 +152,7 @@ func (plugin *vsphereVolumePlugin) ConstructVolumeSpec(volumeName, mountPath str // Abstract interface to disk operations. type vdManager interface { // Creates a volume - CreateVolume(provisioner *vsphereVolumeProvisioner) (vmDiskPath string, volumeSizeGB int, err error) + CreateVolume(provisioner *vsphereVolumeProvisioner) (vmDiskPath string, volumeSizeGB int, fstype string, err error) // Deletes a volume DeleteVolume(deleter *vsphereVolumeDeleter) error } @@ -343,11 +343,15 @@ func (plugin *vsphereVolumePlugin) newProvisionerInternal(options volume.VolumeO } func (v *vsphereVolumeProvisioner) Provision() (*v1.PersistentVolume, error) { - vmDiskPath, sizeKB, err := v.manager.CreateVolume(v) + vmDiskPath, sizeKB, fstype, err := v.manager.CreateVolume(v) if err != nil { return nil, err } + if fstype == "" { + fstype = "ext4" + } + pv := &v1.PersistentVolume{ ObjectMeta: metav1.ObjectMeta{ Name: v.options.PVName, @@ -365,7 +369,7 @@ func (v *vsphereVolumeProvisioner) Provision() (*v1.PersistentVolume, error) { PersistentVolumeSource: v1.PersistentVolumeSource{ VsphereVolume: &v1.VsphereVirtualDiskVolumeSource{ VolumePath: vmDiskPath, - FSType: "ext4", + FSType: fstype, }, }, }, diff --git a/pkg/volume/vsphere_volume/vsphere_volume_test.go b/pkg/volume/vsphere_volume/vsphere_volume_test.go index a0b19ee2736..6608c513f64 100644 --- a/pkg/volume/vsphere_volume/vsphere_volume_test.go +++ b/pkg/volume/vsphere_volume/vsphere_volume_test.go @@ -63,8 +63,8 @@ func getFakeDeviceName(host volume.VolumeHost, volPath string) string { return path.Join(host.GetPluginDir(vsphereVolumePluginName), "device", volPath) } -func (fake *fakePDManager) CreateVolume(v *vsphereVolumeProvisioner) (vmDiskPath string, volumeSizeKB int, err error) { - return "[local] test-volume-name.vmdk", 100, nil +func (fake *fakePDManager) CreateVolume(v *vsphereVolumeProvisioner) (vmDiskPath string, volumeSizeKB int, fstype string, err error) { + return "[local] test-volume-name.vmdk", 100, "ext4", nil } func (fake *fakePDManager) DeleteVolume(vd *vsphereVolumeDeleter) error { diff --git a/pkg/volume/vsphere_volume/vsphere_volume_util.go b/pkg/volume/vsphere_volume/vsphere_volume_util.go index 117b12eda0a..1b8fe52f788 100644 --- a/pkg/volume/vsphere_volume/vsphere_volume_util.go +++ b/pkg/volume/vsphere_volume/vsphere_volume_util.go @@ -38,6 +38,7 @@ const ( diskSCSIPrefix = "wwn-0x" diskformat = "diskformat" datastore = "datastore" + Fstype = "fstype" HostFailuresToTolerateCapability = "hostfailurestotolerate" ForceProvisioningCapability = "forceprovisioning" @@ -73,10 +74,11 @@ func verifyDevicePath(path string) (string, error) { } // CreateVolume creates a vSphere volume. -func (util *VsphereDiskUtil) CreateVolume(v *vsphereVolumeProvisioner) (vmDiskPath string, volumeSizeKB int, err error) { +func (util *VsphereDiskUtil) CreateVolume(v *vsphereVolumeProvisioner) (vmDiskPath string, volumeSizeKB int, fstype string, err error) { + cloud, err := getCloudProvider(v.plugin.host.GetCloudProvider()) if err != nil { - return "", 0, err + return "", 0, "", err } capacity := v.options.PVC.Spec.Resources.Requests[v1.ResourceName(v1.ResourceStorage)] @@ -98,17 +100,21 @@ func (util *VsphereDiskUtil) CreateVolume(v *vsphereVolumeProvisioner) (vmDiskPa volumeOptions.DiskFormat = value case datastore: volumeOptions.Datastore = value + case Fstype: + fstype = value + glog.V(4).Infof("Setting fstype as %q", fstype) case HostFailuresToTolerateCapability, ForceProvisioningCapability, CacheReservationCapability, DiskStripesCapability, ObjectSpaceReservationCapability, IopsLimitCapability: capabilityData, err := validateVSANCapability(strings.ToLower(parameter), value) if err != nil { - return "", 0, err + return "", 0, "", err } else { volumeOptions.StorageProfileData += capabilityData } + default: - return "", 0, fmt.Errorf("invalid option %q for volume plugin %s", parameter, v.plugin.GetPluginName()) + return "", 0, "", fmt.Errorf("invalid option %q for volume plugin %s", parameter, v.plugin.GetPluginName()) } } @@ -118,16 +124,16 @@ func (util *VsphereDiskUtil) CreateVolume(v *vsphereVolumeProvisioner) (vmDiskPa glog.V(1).Infof("StorageProfileData in vsphere volume %q", volumeOptions.StorageProfileData) // TODO: implement PVC.Selector parsing if v.options.PVC.Spec.Selector != nil { - return "", 0, fmt.Errorf("claim.Spec.Selector is not supported for dynamic provisioning on vSphere") + return "", 0, "", fmt.Errorf("claim.Spec.Selector is not supported for dynamic provisioning on vSphere") } vmDiskPath, err = cloud.CreateVolume(volumeOptions) if err != nil { glog.V(2).Infof("Error creating vsphere volume: %v", err) - return "", 0, err + return "", 0, "", err } glog.V(2).Infof("Successfully created vsphere volume %s", name) - return vmDiskPath, volSizeKB, nil + return vmDiskPath, volSizeKB, fstype, nil } // DeleteVolume deletes a vSphere volume. diff --git a/plugin/pkg/scheduler/BUILD b/plugin/pkg/scheduler/BUILD index f318e480ec5..fe29a863552 100644 --- a/plugin/pkg/scheduler/BUILD +++ b/plugin/pkg/scheduler/BUILD @@ -10,15 +10,23 @@ load( go_test( name = "go_default_test", - srcs = ["scheduler_test.go"], + srcs = [ + "extender_test.go", + "generic_scheduler_test.go", + "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", @@ -26,6 +34,7 @@ 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", @@ -35,24 +44,37 @@ go_test( go_library( name = "go_default_library", - srcs = ["scheduler.go"], + srcs = [ + "equivalence_cache.go", + "extender.go", + "generic_scheduler.go", + "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 6e8ae7d4d1b..0e89ae7f6bb 100644 --- a/test/e2e/BUILD +++ b/test/e2e/BUILD @@ -89,6 +89,7 @@ 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 new file mode 100644 index 00000000000..24e90d7f515 --- /dev/null +++ b/test/e2e/vsphere_volume_fstype.go @@ -0,0 +1,129 @@ +/* +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 308c4eb0d78..782d5f52c41 100644 --- a/vendor/BUILD +++ b/vendor/BUILD @@ -10524,6 +10524,8 @@ 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", @@ -10533,6 +10535,7 @@ 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", @@ -10541,6 +10544,7 @@ 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", ], ) @@ -10555,7 +10559,10 @@ 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 = [ @@ -10573,6 +10580,7 @@ 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", @@ -10597,6 +10605,7 @@ 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", ], From 72a27daa3c99e910d5d80741c9b2e8afce25e8dd Mon Sep 17 00:00:00 2001 From: Miao Luo Date: Wed, 22 Feb 2017 17:59:36 -0800 Subject: [PATCH 2/2] 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", ],