mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Add support for fstype in Storage Class for vSphere Cloud Provider
This commit is contained in:
		@@ -46,6 +46,7 @@ filegroup(
 | 
				
			|||||||
        "//hack:all-srcs",
 | 
					        "//hack:all-srcs",
 | 
				
			||||||
        "//pkg:all-srcs",
 | 
					        "//pkg:all-srcs",
 | 
				
			||||||
        "//plugin:all-srcs",
 | 
					        "//plugin:all-srcs",
 | 
				
			||||||
 | 
					        "//src/gopkg.in/mikedanese/gazel.v14:all-srcs",
 | 
				
			||||||
        "//test:all-srcs",
 | 
					        "//test:all-srcs",
 | 
				
			||||||
        "//third_party:all-srcs",
 | 
					        "//third_party:all-srcs",
 | 
				
			||||||
        "//vendor:all-srcs",
 | 
					        "//vendor:all-srcs",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,6 +24,7 @@ filegroup(
 | 
				
			|||||||
        "//cmd/genyaml:all-srcs",
 | 
					        "//cmd/genyaml:all-srcs",
 | 
				
			||||||
        "//cmd/gke-certificates-controller:all-srcs",
 | 
					        "//cmd/gke-certificates-controller:all-srcs",
 | 
				
			||||||
        "//cmd/hyperkube:all-srcs",
 | 
					        "//cmd/hyperkube:all-srcs",
 | 
				
			||||||
 | 
					        "//cmd/kube-aggregator:all-srcs",
 | 
				
			||||||
        "//cmd/kube-apiserver:all-srcs",
 | 
					        "//cmd/kube-apiserver:all-srcs",
 | 
				
			||||||
        "//cmd/kube-controller-manager:all-srcs",
 | 
					        "//cmd/kube-controller-manager:all-srcs",
 | 
				
			||||||
        "//cmd/kube-proxy:all-srcs",
 | 
					        "//cmd/kube-proxy:all-srcs",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,9 +61,11 @@ metadata:
 | 
				
			|||||||
provisioner: kubernetes.io/vsphere-volume
 | 
					provisioner: kubernetes.io/vsphere-volume
 | 
				
			||||||
parameters:
 | 
					parameters:
 | 
				
			||||||
  diskformat: eagerzeroedthick
 | 
					  diskformat: eagerzeroedthick
 | 
				
			||||||
 | 
					  fstype:     ext3
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* `diskformat`: `thin`, `zeroedthick` and `eagerzeroedthick`. See vSphere docs for details. Default: `"thin"`.
 | 
					* `diskformat`: `thin`, `zeroedthick` and `eagerzeroedthick`. See vSphere docs for details. Default: `"thin"`.
 | 
				
			||||||
 | 
					* `fstype`: fstype that are supported by kubernetes. Default: `"ext4"`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### Portworx Volume
 | 
					#### Portworx Volume
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -214,6 +214,7 @@
 | 
				
			|||||||
      provisioner: kubernetes.io/vsphere-volume
 | 
					      provisioner: kubernetes.io/vsphere-volume
 | 
				
			||||||
      parameters:
 | 
					      parameters:
 | 
				
			||||||
          diskformat: zeroedthick
 | 
					          diskformat: zeroedthick
 | 
				
			||||||
 | 
					          fstype:     ext3
 | 
				
			||||||
      ```
 | 
					      ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      [Download example](vsphere-volume-sc-fast.yaml?raw=true)
 | 
					      [Download example](vsphere-volume-sc-fast.yaml?raw=true)
 | 
				
			||||||
@@ -246,9 +247,10 @@
 | 
				
			|||||||
      ``` bash
 | 
					      ``` bash
 | 
				
			||||||
      $ kubectl describe storageclass fast 
 | 
					      $ kubectl describe storageclass fast 
 | 
				
			||||||
      Name:           fast
 | 
					      Name:           fast
 | 
				
			||||||
 | 
					      IsDefaultClass: No
 | 
				
			||||||
      Annotations:    <none>
 | 
					      Annotations:    <none>
 | 
				
			||||||
      Provisioner:    kubernetes.io/vsphere-volume
 | 
					      Provisioner:    kubernetes.io/vsphere-volume
 | 
				
			||||||
      Parameters:	diskformat=zeroedthick
 | 
					      Parameters:     diskformat=zeroedthick,fstype=ext3
 | 
				
			||||||
      No events.
 | 
					      No events.
 | 
				
			||||||
      ```
 | 
					      ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -285,12 +287,17 @@
 | 
				
			|||||||
      $ kubectl describe pvc pvcsc001
 | 
					      $ kubectl describe pvc pvcsc001
 | 
				
			||||||
      Name:           pvcsc001
 | 
					      Name:           pvcsc001
 | 
				
			||||||
      Namespace:      default
 | 
					      Namespace:      default
 | 
				
			||||||
 | 
					      StorageClass:   fast
 | 
				
			||||||
      Status:         Bound
 | 
					      Status:         Bound
 | 
				
			||||||
      Volume:		pvc-80f7b5c1-94b6-11e6-a24f-005056a79d2d
 | 
					      Volume:         pvc-83295256-f8e0-11e6-8263-005056b2349c
 | 
				
			||||||
      Labels:         <none>
 | 
					      Labels:         <none>
 | 
				
			||||||
      Capacity:       2Gi
 | 
					      Capacity:       2Gi
 | 
				
			||||||
      Access Modes:   RWO
 | 
					      Access Modes:   RWO
 | 
				
			||||||
      No events.
 | 
					      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.
 | 
					      Persistent Volume is automatically created and is bounded to this pvc.
 | 
				
			||||||
@@ -298,9 +305,10 @@
 | 
				
			|||||||
      Verifying persistent volume claim is created:
 | 
					      Verifying persistent volume claim is created:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      ``` bash
 | 
					      ``` bash
 | 
				
			||||||
      $ kubectl describe pv pvc-80f7b5c1-94b6-11e6-a24f-005056a79d2d
 | 
					      $ kubectl describe pv pvc-83295256-f8e0-11e6-8263-005056b2349c
 | 
				
			||||||
      Name:		pvc-80f7b5c1-94b6-11e6-a24f-005056a79d2d
 | 
					      Name:           pvc-83295256-f8e0-11e6-8263-005056b2349c
 | 
				
			||||||
      Labels:         <none>
 | 
					      Labels:         <none>
 | 
				
			||||||
 | 
					      StorageClass:   fast
 | 
				
			||||||
      Status:         Bound
 | 
					      Status:         Bound
 | 
				
			||||||
      Claim:          default/pvcsc001
 | 
					      Claim:          default/pvcsc001
 | 
				
			||||||
      Reclaim Policy: Delete
 | 
					      Reclaim Policy: Delete
 | 
				
			||||||
@@ -309,8 +317,8 @@
 | 
				
			|||||||
      Message:
 | 
					      Message:
 | 
				
			||||||
      Source:
 | 
					      Source:
 | 
				
			||||||
          Type:       vSphereVolume (a Persistent Disk resource in vSphere)
 | 
					          Type:       vSphereVolume (a Persistent Disk resource in vSphere)
 | 
				
			||||||
          VolumePath:	[datastore1] kubevols/kubernetes-dynamic-pvc-80f7b5c1-94b6-11e6-a24f-005056a79d2d.vmdk
 | 
					          VolumePath: [datastore1] kubevols/kubernetes-dynamic-pvc-83295256-f8e0-11e6-8263-005056b2349c.vmdk
 | 
				
			||||||
          FSType:	ext4
 | 
					          FSType:     ext3
 | 
				
			||||||
      No events.
 | 
					      No events.
 | 
				
			||||||
      ```
 | 
					      ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,3 +5,4 @@ metadata:
 | 
				
			|||||||
provisioner: kubernetes.io/vsphere-volume
 | 
					provisioner: kubernetes.io/vsphere-volume
 | 
				
			||||||
parameters:
 | 
					parameters:
 | 
				
			||||||
    diskformat: zeroedthick
 | 
					    diskformat: zeroedthick
 | 
				
			||||||
 | 
					    fstype:     ext3
 | 
				
			||||||
@@ -9,7 +9,10 @@ load(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
go_library(
 | 
					go_library(
 | 
				
			||||||
    name = "go_default_library",
 | 
					    name = "go_default_library",
 | 
				
			||||||
    srcs = ["register.go"],
 | 
					    srcs = [
 | 
				
			||||||
 | 
					        "conversion.go",
 | 
				
			||||||
 | 
					        "register.go",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
    tags = ["automanaged"],
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//pkg/api:go_default_library",
 | 
					        "//pkg/api:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,6 +11,7 @@ load(
 | 
				
			|||||||
go_library(
 | 
					go_library(
 | 
				
			||||||
    name = "go_default_library",
 | 
					    name = "go_default_library",
 | 
				
			||||||
    srcs = [
 | 
					    srcs = [
 | 
				
			||||||
 | 
					        "conversion.go",
 | 
				
			||||||
        "defaults.go",
 | 
					        "defaults.go",
 | 
				
			||||||
        "doc.go",
 | 
					        "doc.go",
 | 
				
			||||||
        "field_constants.go",
 | 
					        "field_constants.go",
 | 
				
			||||||
@@ -24,6 +25,7 @@ go_library(
 | 
				
			|||||||
    ],
 | 
					    ],
 | 
				
			||||||
    tags = ["automanaged"],
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
 | 
					        "//pkg/util/labels:go_default_library",
 | 
				
			||||||
        "//vendor:github.com/davecgh/go-spew/spew",
 | 
					        "//vendor:github.com/davecgh/go-spew/spew",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/api/meta",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/api/meta",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/api/resource",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/api/resource",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,12 +13,16 @@ go_library(
 | 
				
			|||||||
    srcs = [
 | 
					    srcs = [
 | 
				
			||||||
        "default_storage_factory_builder.go",
 | 
					        "default_storage_factory_builder.go",
 | 
				
			||||||
        "doc.go",
 | 
					        "doc.go",
 | 
				
			||||||
 | 
					        "rest.go",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    tags = ["automanaged"],
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//pkg/api:go_default_library",
 | 
					        "//pkg/api:go_default_library",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/runtime",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/runtime",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/runtime/schema",
 | 
					        "//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/server/storage",
 | 
				
			||||||
        "//vendor:k8s.io/apiserver/pkg/storage/storagebackend",
 | 
					        "//vendor:k8s.io/apiserver/pkg/storage/storagebackend",
 | 
				
			||||||
        "//vendor:k8s.io/apiserver/pkg/util/flag",
 | 
					        "//vendor:k8s.io/apiserver/pkg/util/flag",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -152,7 +152,7 @@ func (plugin *vsphereVolumePlugin) ConstructVolumeSpec(volumeName, mountPath str
 | 
				
			|||||||
// Abstract interface to disk operations.
 | 
					// Abstract interface to disk operations.
 | 
				
			||||||
type vdManager interface {
 | 
					type vdManager interface {
 | 
				
			||||||
	// Creates a volume
 | 
						// 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
 | 
						// Deletes a volume
 | 
				
			||||||
	DeleteVolume(deleter *vsphereVolumeDeleter) error
 | 
						DeleteVolume(deleter *vsphereVolumeDeleter) error
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -343,11 +343,15 @@ func (plugin *vsphereVolumePlugin) newProvisionerInternal(options volume.VolumeO
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (v *vsphereVolumeProvisioner) Provision() (*v1.PersistentVolume, error) {
 | 
					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 {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if fstype == "" {
 | 
				
			||||||
 | 
							fstype = "ext4"
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pv := &v1.PersistentVolume{
 | 
						pv := &v1.PersistentVolume{
 | 
				
			||||||
		ObjectMeta: metav1.ObjectMeta{
 | 
							ObjectMeta: metav1.ObjectMeta{
 | 
				
			||||||
			Name:   v.options.PVName,
 | 
								Name:   v.options.PVName,
 | 
				
			||||||
@@ -365,7 +369,7 @@ func (v *vsphereVolumeProvisioner) Provision() (*v1.PersistentVolume, error) {
 | 
				
			|||||||
			PersistentVolumeSource: v1.PersistentVolumeSource{
 | 
								PersistentVolumeSource: v1.PersistentVolumeSource{
 | 
				
			||||||
				VsphereVolume: &v1.VsphereVirtualDiskVolumeSource{
 | 
									VsphereVolume: &v1.VsphereVirtualDiskVolumeSource{
 | 
				
			||||||
					VolumePath: vmDiskPath,
 | 
										VolumePath: vmDiskPath,
 | 
				
			||||||
					FSType:     "ext4",
 | 
										FSType:     fstype,
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -63,8 +63,8 @@ func getFakeDeviceName(host volume.VolumeHost, volPath string) string {
 | 
				
			|||||||
	return path.Join(host.GetPluginDir(vsphereVolumePluginName), "device", volPath)
 | 
						return path.Join(host.GetPluginDir(vsphereVolumePluginName), "device", volPath)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (fake *fakePDManager) CreateVolume(v *vsphereVolumeProvisioner) (vmDiskPath string, volumeSizeKB int, err error) {
 | 
					func (fake *fakePDManager) CreateVolume(v *vsphereVolumeProvisioner) (vmDiskPath string, volumeSizeKB int, fstype string, err error) {
 | 
				
			||||||
	return "[local] test-volume-name.vmdk", 100, nil
 | 
						return "[local] test-volume-name.vmdk", 100, "ext4", nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (fake *fakePDManager) DeleteVolume(vd *vsphereVolumeDeleter) error {
 | 
					func (fake *fakePDManager) DeleteVolume(vd *vsphereVolumeDeleter) error {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,6 +38,7 @@ const (
 | 
				
			|||||||
	diskSCSIPrefix     = "wwn-0x"
 | 
						diskSCSIPrefix     = "wwn-0x"
 | 
				
			||||||
	diskformat         = "diskformat"
 | 
						diskformat         = "diskformat"
 | 
				
			||||||
	datastore          = "datastore"
 | 
						datastore          = "datastore"
 | 
				
			||||||
 | 
						Fstype		   = "fstype"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	HostFailuresToTolerateCapability    = "hostfailurestotolerate"
 | 
						HostFailuresToTolerateCapability    = "hostfailurestotolerate"
 | 
				
			||||||
	ForceProvisioningCapability         = "forceprovisioning"
 | 
						ForceProvisioningCapability         = "forceprovisioning"
 | 
				
			||||||
@@ -73,10 +74,11 @@ func verifyDevicePath(path string) (string, error) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CreateVolume creates a vSphere volume.
 | 
					// 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())
 | 
						cloud, err := getCloudProvider(v.plugin.host.GetCloudProvider())
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return "", 0, err
 | 
							return "", 0, "", err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	capacity := v.options.PVC.Spec.Resources.Requests[v1.ResourceName(v1.ResourceStorage)]
 | 
						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
 | 
								volumeOptions.DiskFormat = value
 | 
				
			||||||
		case datastore:
 | 
							case datastore:
 | 
				
			||||||
			volumeOptions.Datastore = value
 | 
								volumeOptions.Datastore = value
 | 
				
			||||||
 | 
							case Fstype:
 | 
				
			||||||
 | 
								fstype = value
 | 
				
			||||||
 | 
								glog.V(4).Infof("Setting fstype as %q", fstype)
 | 
				
			||||||
		case HostFailuresToTolerateCapability, ForceProvisioningCapability,
 | 
							case HostFailuresToTolerateCapability, ForceProvisioningCapability,
 | 
				
			||||||
			CacheReservationCapability, DiskStripesCapability,
 | 
								CacheReservationCapability, DiskStripesCapability,
 | 
				
			||||||
			ObjectSpaceReservationCapability, IopsLimitCapability:
 | 
								ObjectSpaceReservationCapability, IopsLimitCapability:
 | 
				
			||||||
			capabilityData, err := validateVSANCapability(strings.ToLower(parameter), value)
 | 
								capabilityData, err := validateVSANCapability(strings.ToLower(parameter), value)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				return "", 0, err
 | 
									return "", 0, "", err
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				volumeOptions.StorageProfileData += capabilityData
 | 
									volumeOptions.StorageProfileData += capabilityData
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		default:
 | 
							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)
 | 
						glog.V(1).Infof("StorageProfileData in vsphere volume %q", volumeOptions.StorageProfileData)
 | 
				
			||||||
	// TODO: implement PVC.Selector parsing
 | 
						// TODO: implement PVC.Selector parsing
 | 
				
			||||||
	if v.options.PVC.Spec.Selector != nil {
 | 
						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)
 | 
						vmDiskPath, err = cloud.CreateVolume(volumeOptions)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		glog.V(2).Infof("Error creating vsphere volume: %v", err)
 | 
							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)
 | 
						glog.V(2).Infof("Successfully created vsphere volume %s", name)
 | 
				
			||||||
	return vmDiskPath, volSizeKB, nil
 | 
						return vmDiskPath, volSizeKB, fstype, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DeleteVolume deletes a vSphere volume.
 | 
					// DeleteVolume deletes a vSphere volume.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,15 +10,23 @@ load(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
go_test(
 | 
					go_test(
 | 
				
			||||||
    name = "go_default_test",
 | 
					    name = "go_default_test",
 | 
				
			||||||
    srcs = ["scheduler_test.go"],
 | 
					    srcs = [
 | 
				
			||||||
 | 
					        "extender_test.go",
 | 
				
			||||||
 | 
					        "generic_scheduler_test.go",
 | 
				
			||||||
 | 
					        "scheduler_test.go",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
    library = ":go_default_library",
 | 
					    library = ":go_default_library",
 | 
				
			||||||
    tags = ["automanaged"],
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//pkg/api:go_default_library",
 | 
					        "//pkg/api:go_default_library",
 | 
				
			||||||
        "//pkg/api/testapi:go_default_library",
 | 
					        "//pkg/api/testapi:go_default_library",
 | 
				
			||||||
        "//pkg/api/v1: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:go_default_library",
 | 
				
			||||||
        "//plugin/pkg/scheduler/algorithm/predicates: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/core:go_default_library",
 | 
				
			||||||
        "//plugin/pkg/scheduler/schedulercache:go_default_library",
 | 
					        "//plugin/pkg/scheduler/schedulercache:go_default_library",
 | 
				
			||||||
        "//plugin/pkg/scheduler/testing: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/apis/meta/v1",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/labels",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/labels",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/util/diff",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/util/diff",
 | 
				
			||||||
 | 
					        "//vendor:k8s.io/apimachinery/pkg/util/sets",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/util/wait",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/util/wait",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/pkg/api/v1",
 | 
					        "//vendor:k8s.io/client-go/pkg/api/v1",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/tools/cache",
 | 
					        "//vendor:k8s.io/client-go/tools/cache",
 | 
				
			||||||
@@ -35,24 +44,37 @@ go_test(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
go_library(
 | 
					go_library(
 | 
				
			||||||
    name = "go_default_library",
 | 
					    name = "go_default_library",
 | 
				
			||||||
    srcs = ["scheduler.go"],
 | 
					    srcs = [
 | 
				
			||||||
 | 
					        "equivalence_cache.go",
 | 
				
			||||||
 | 
					        "extender.go",
 | 
				
			||||||
 | 
					        "generic_scheduler.go",
 | 
				
			||||||
 | 
					        "scheduler.go",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
    tags = ["automanaged"],
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//pkg/api/v1:go_default_library",
 | 
					        "//pkg/api/v1:go_default_library",
 | 
				
			||||||
        "//pkg/client/clientset_generated/clientset:go_default_library",
 | 
					        "//pkg/client/clientset_generated/clientset:go_default_library",
 | 
				
			||||||
        "//pkg/client/listers/core/v1: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:go_default_library",
 | 
				
			||||||
 | 
					        "//plugin/pkg/scheduler/algorithm/predicates:go_default_library",
 | 
				
			||||||
        "//plugin/pkg/scheduler/api:go_default_library",
 | 
					        "//plugin/pkg/scheduler/api:go_default_library",
 | 
				
			||||||
        "//plugin/pkg/scheduler/core:go_default_library",
 | 
					        "//plugin/pkg/scheduler/core:go_default_library",
 | 
				
			||||||
        "//plugin/pkg/scheduler/metrics:go_default_library",
 | 
					        "//plugin/pkg/scheduler/metrics:go_default_library",
 | 
				
			||||||
        "//plugin/pkg/scheduler/schedulercache:go_default_library",
 | 
					        "//plugin/pkg/scheduler/schedulercache:go_default_library",
 | 
				
			||||||
        "//plugin/pkg/scheduler/util:go_default_library",
 | 
					        "//plugin/pkg/scheduler/util:go_default_library",
 | 
				
			||||||
        "//vendor:github.com/golang/glog",
 | 
					        "//vendor:github.com/golang/glog",
 | 
				
			||||||
 | 
					        "//vendor:github.com/golang/groupcache/lru",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
 | 
					        "//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/sets",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/util/wait",
 | 
					        "//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/cache",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/tools/record",
 | 
					        "//vendor:k8s.io/client-go/tools/record",
 | 
				
			||||||
 | 
					        "//vendor:k8s.io/client-go/util/workqueue",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -89,6 +89,7 @@ go_library(
 | 
				
			|||||||
        "volumes.go",
 | 
					        "volumes.go",
 | 
				
			||||||
        "vsphere_utils.go",
 | 
					        "vsphere_utils.go",
 | 
				
			||||||
        "vsphere_volume_diskformat.go",
 | 
					        "vsphere_volume_diskformat.go",
 | 
				
			||||||
 | 
					        "vsphere_volume_fstype.go",
 | 
				
			||||||
        "vsphere_volume_ops_storm.go",
 | 
					        "vsphere_volume_ops_storm.go",
 | 
				
			||||||
        "vsphere_volume_placement.go",
 | 
					        "vsphere_volume_placement.go",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										129
									
								
								test/e2e/vsphere_volume_fstype.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								test/e2e/vsphere_volume_fstype.go
									
									
									
									
									
										Normal file
									
								
							@@ -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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										9
									
								
								vendor/BUILD
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								vendor/BUILD
									
									
									
									
										vendored
									
									
								
							@@ -10524,6 +10524,8 @@ go_test(
 | 
				
			|||||||
        "//vendor:github.com/stretchr/testify/assert",
 | 
					        "//vendor:github.com/stretchr/testify/assert",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/api/meta",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/api/meta",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/apimachinery",
 | 
					        "//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/apis/meta/v1",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/openapi",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/openapi",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/runtime",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/runtime",
 | 
				
			||||||
@@ -10533,6 +10535,7 @@ go_test(
 | 
				
			|||||||
        "//vendor:k8s.io/apimachinery/pkg/util/sets",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/util/sets",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/version",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/version",
 | 
				
			||||||
        "//vendor:k8s.io/apiserver/pkg/apis/example",
 | 
					        "//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/apis/example/v1",
 | 
				
			||||||
        "//vendor:k8s.io/apiserver/pkg/authentication/user",
 | 
					        "//vendor:k8s.io/apiserver/pkg/authentication/user",
 | 
				
			||||||
        "//vendor:k8s.io/apiserver/pkg/authorization/authorizer",
 | 
					        "//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/healthz",
 | 
				
			||||||
        "//vendor:k8s.io/apiserver/pkg/server/mux",
 | 
					        "//vendor:k8s.io/apiserver/pkg/server/mux",
 | 
				
			||||||
        "//vendor:k8s.io/apiserver/pkg/storage/etcd/testing",
 | 
					        "//vendor:k8s.io/apiserver/pkg/storage/etcd/testing",
 | 
				
			||||||
 | 
					        "//vendor:k8s.io/apiserver/pkg/storage/storagebackend",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/rest",
 | 
					        "//vendor:k8s.io/client-go/rest",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -10555,7 +10559,10 @@ go_library(
 | 
				
			|||||||
        "k8s.io/apiserver/pkg/server/genericapiserver.go",
 | 
					        "k8s.io/apiserver/pkg/server/genericapiserver.go",
 | 
				
			||||||
        "k8s.io/apiserver/pkg/server/healthz.go",
 | 
					        "k8s.io/apiserver/pkg/server/healthz.go",
 | 
				
			||||||
        "k8s.io/apiserver/pkg/server/hooks.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/serve.go",
 | 
				
			||||||
 | 
					        "k8s.io/apiserver/pkg/server/storage_factory.go",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    tags = ["automanaged"],
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
@@ -10573,6 +10580,7 @@ go_library(
 | 
				
			|||||||
        "//vendor:k8s.io/apimachinery/pkg/runtime",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/runtime",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/runtime/schema",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/runtime/schema",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/runtime/serializer",
 | 
					        "//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/net",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/util/runtime",
 | 
					        "//vendor:k8s.io/apimachinery/pkg/util/runtime",
 | 
				
			||||||
        "//vendor:k8s.io/apimachinery/pkg/util/sets",
 | 
					        "//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/healthz",
 | 
				
			||||||
        "//vendor:k8s.io/apiserver/pkg/server/mux",
 | 
					        "//vendor:k8s.io/apiserver/pkg/server/mux",
 | 
				
			||||||
        "//vendor:k8s.io/apiserver/pkg/server/routes",
 | 
					        "//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/rest",
 | 
				
			||||||
        "//vendor:k8s.io/client-go/util/cert",
 | 
					        "//vendor:k8s.io/client-go/util/cert",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user