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", ],