mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-10-31 10:18:13 +00:00 
			
		
		
		
	Adds fstype support in storage class for Photon Cloud Provider.
This commit is contained in:
		| @@ -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", | ||||
|   | ||||
| @@ -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", | ||||
|   | ||||
| @@ -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", | ||||
|   | ||||
| @@ -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", | ||||
|   | ||||
| @@ -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", | ||||
|   | ||||
| @@ -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, | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
|   | ||||
| @@ -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 { | ||||
|   | ||||
| @@ -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. | ||||
|   | ||||
| @@ -38,7 +38,7 @@ const ( | ||||
| 	diskSCSIPrefix     = "wwn-0x" | ||||
| 	diskformat         = "diskformat" | ||||
| 	datastore          = "datastore" | ||||
| 	Fstype		   = "fstype" | ||||
| 	Fstype             = "fstype" | ||||
|  | ||||
| 	HostFailuresToTolerateCapability    = "hostfailurestotolerate" | ||||
| 	ForceProvisioningCapability         = "forceprovisioning" | ||||
|   | ||||
| @@ -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", | ||||
|     ], | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -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", | ||||
|     ], | ||||
|   | ||||
| @@ -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) | ||||
|  | ||||
| } | ||||
							
								
								
									
										9
									
								
								vendor/BUILD
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								vendor/BUILD
									
									
									
									
										vendored
									
									
								
							| @@ -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", | ||||
|     ], | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Miao Luo
					Miao Luo