mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-10-31 18:28: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", |         "//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,7 +24,6 @@ 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", | ||||||
|   | |||||||
| @@ -9,10 +9,7 @@ load( | |||||||
|  |  | ||||||
| go_library( | go_library( | ||||||
|     name = "go_default_library", |     name = "go_default_library", | ||||||
|     srcs = [ |     srcs = ["register.go"], | ||||||
|         "conversion.go", |  | ||||||
|         "register.go", |  | ||||||
|     ], |  | ||||||
|     tags = ["automanaged"], |     tags = ["automanaged"], | ||||||
|     deps = [ |     deps = [ | ||||||
|         "//pkg/api:go_default_library", |         "//pkg/api:go_default_library", | ||||||
|   | |||||||
| @@ -11,7 +11,6 @@ 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", | ||||||
| @@ -25,7 +24,6 @@ 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,16 +13,12 @@ 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", | ||||||
|   | |||||||
| @@ -151,7 +151,7 @@ func (plugin *photonPersistentDiskPlugin) ConstructVolumeSpec(volumeSpecName, mo | |||||||
| // Abstract interface to disk operations. | // Abstract interface to disk operations. | ||||||
| type pdManager interface { | type pdManager interface { | ||||||
| 	// Creates a volume | 	// 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 | 	// Deletes a volume | ||||||
| 	DeleteVolume(deleter *photonPersistentDiskDeleter) error | 	DeleteVolume(deleter *photonPersistentDiskDeleter) error | ||||||
| } | } | ||||||
| @@ -342,11 +342,15 @@ func (plugin *photonPersistentDiskPlugin) newProvisionerInternal(options volume. | |||||||
| } | } | ||||||
|  |  | ||||||
| func (p *photonPersistentDiskProvisioner) Provision() (*v1.PersistentVolume, error) { | 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 { | 	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:   p.options.PVName, | 			Name:   p.options.PVName, | ||||||
| @@ -364,7 +368,7 @@ func (p *photonPersistentDiskProvisioner) Provision() (*v1.PersistentVolume, err | |||||||
| 			PersistentVolumeSource: v1.PersistentVolumeSource{ | 			PersistentVolumeSource: v1.PersistentVolumeSource{ | ||||||
| 				PhotonPersistentDisk: &v1.PhotonPersistentDiskVolumeSource{ | 				PhotonPersistentDisk: &v1.PhotonPersistentDiskVolumeSource{ | ||||||
| 					PdID:   pdID, | 					PdID:   pdID, | ||||||
| 					FSType: "ext4", | 					FSType: fstype, | ||||||
| 				}, | 				}, | ||||||
| 			}, | 			}, | ||||||
| 		}, | 		}, | ||||||
|   | |||||||
| @@ -88,8 +88,8 @@ func contains(modes []v1.PersistentVolumeAccessMode, mode v1.PersistentVolumeAcc | |||||||
| type fakePDManager struct { | type fakePDManager struct { | ||||||
| } | } | ||||||
|  |  | ||||||
| func (fake *fakePDManager) CreateVolume(c *photonPersistentDiskProvisioner) (pdID string, volumeSizeGB int, err error) { | func (fake *fakePDManager) CreateVolume(c *photonPersistentDiskProvisioner) (pdID string, volumeSizeGB int, fstype string, err error) { | ||||||
| 	return "test-photon-pd-id", 10, nil | 	return "test-photon-pd-id", 10, "ext4", nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (fake *fakePDManager) DeleteVolume(cd *photonPersistentDiskDeleter) error { | func (fake *fakePDManager) DeleteVolume(cd *photonPersistentDiskDeleter) error { | ||||||
|   | |||||||
| @@ -80,11 +80,11 @@ func verifyDevicePath(path string) (string, error) { | |||||||
| } | } | ||||||
|  |  | ||||||
| // CreateVolume creates a PhotonController persistent disk. | // 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()) | 	cloud, err := getCloudProvider(p.plugin.host.GetCloudProvider()) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		glog.Errorf("Photon Controller Util: CreateVolume failed to get cloud provider. Error [%v]", err) | 		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)] | 	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) { | 		switch strings.ToLower(parameter) { | ||||||
| 		case "flavor": | 		case "flavor": | ||||||
| 			volumeOptions.Flavor = value | 			volumeOptions.Flavor = value | ||||||
|  | 		case "fstype": | ||||||
|  | 			fstype = value | ||||||
|  | 			glog.V(4).Infof("Photon Controller Util: Setting fstype to %s", fstype) | ||||||
| 		default: | 		default: | ||||||
| 			glog.Errorf("Photon Controller Util: invalid option %s for volume plugin %s.", parameter, p.plugin.GetPluginName()) | 			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) | 	pdID, err = cloud.CreateDisk(volumeOptions) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		glog.Errorf("Photon Controller Util: failed to CreateDisk. Error [%v]", err) | 		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) | 	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. | // DeleteVolume deletes a vSphere volume. | ||||||
|   | |||||||
| @@ -38,7 +38,7 @@ const ( | |||||||
| 	diskSCSIPrefix     = "wwn-0x" | 	diskSCSIPrefix     = "wwn-0x" | ||||||
| 	diskformat         = "diskformat" | 	diskformat         = "diskformat" | ||||||
| 	datastore          = "datastore" | 	datastore          = "datastore" | ||||||
| 	Fstype		   = "fstype" | 	Fstype             = "fstype" | ||||||
|  |  | ||||||
| 	HostFailuresToTolerateCapability    = "hostfailurestotolerate" | 	HostFailuresToTolerateCapability    = "hostfailurestotolerate" | ||||||
| 	ForceProvisioningCapability         = "forceprovisioning" | 	ForceProvisioningCapability         = "forceprovisioning" | ||||||
|   | |||||||
| @@ -10,23 +10,15 @@ load( | |||||||
|  |  | ||||||
| go_test( | go_test( | ||||||
|     name = "go_default_test", |     name = "go_default_test", | ||||||
|     srcs = [ |     srcs = ["scheduler_test.go"], | ||||||
|         "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", | ||||||
| @@ -34,7 +26,6 @@ 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", | ||||||
| @@ -44,37 +35,24 @@ go_test( | |||||||
|  |  | ||||||
| go_library( | go_library( | ||||||
|     name = "go_default_library", |     name = "go_default_library", | ||||||
|     srcs = [ |     srcs = ["scheduler.go"], | ||||||
|         "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,7 +89,6 @@ 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", | ||||||
|     ], |     ], | ||||||
|   | |||||||
| @@ -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: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", | ||||||
| @@ -10535,7 +10533,6 @@ 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", | ||||||
| @@ -10544,7 +10541,6 @@ 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", | ||||||
|     ], |     ], | ||||||
| ) | ) | ||||||
| @@ -10559,10 +10555,7 @@ 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 = [ | ||||||
| @@ -10580,7 +10573,6 @@ 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", | ||||||
| @@ -10605,7 +10597,6 @@ 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
	 Miao Luo
					Miao Luo