def _create_storage_class_for_fs_type(self, fs_type, vpg='DEFAULT_RAID_1_VPG'): sc_name = 'file-system-volume-{}'.format(fs_type) sc_params = {'fsType': fs_type, 'vpg': vpg} self.addCleanup(lambda: KubeUtils.delete_storage_class(sc_name)) KubeUtils.create_storage_class(sc_name, sc_params) return sc_name
def _test_storage_class_case(self, sc_name, params): pvc_name = 'pvc-{}'.format(sc_name) KubeUtils.create_storage_class(sc_name, params) self.addCleanup(lambda: KubeUtils.delete_storage_class(sc_name)) KubeUtils.create_pvc_and_wait_to_bound(self, pvc_name, sc_name) nvmesh_vol_name = KubeUtils.get_nvmesh_vol_name_from_pvc_name(pvc_name) NVMeshUtils.wait_for_nvmesh_volume(nvmesh_vol_name) # Verify NVMesh Volume has the required properties NVMeshUtils.wait_for_nvmesh_vol_properties(nvmesh_vol_name, params, self)
def _test_storage_class_case(self, sc_name, params): pvc_name = 'pvc-{}'.format(sc_name) KubeUtils.create_storage_class(sc_name, params) self.addCleanup(lambda: KubeUtils.delete_storage_class(sc_name)) additional_fields = { 'description': 'Storage Class Parameters test for ' + sc_name } KubeUtils.create_pvc_and_wait_to_bound(self, pvc_name, sc_name, **additional_fields) nvmesh_vol_name = KubeUtils.get_nvmesh_vol_name_from_pvc_name(pvc_name) mgmt_address = NVMeshUtils.wait_for_nvmesh_volume(nvmesh_vol_name) # Verify NVMesh Volume has the required properties NVMeshUtils.wait_for_nvmesh_vol_properties(nvmesh_vol_name, params, self)
def _test_fs_type(self, fs_type): # Create Storage class for the specific File System Type sc_name = 'raid1-{}'.format(fs_type) sc_params = {'fsType': fs_type, 'vpg': 'DEFAULT_RAID_1_VPG'} KubeUtils.create_storage_class(sc_name, sc_params) self.addCleanup(lambda: KubeUtils.delete_storage_class(sc_name)) # create the PVC pvc_name = 'test-{}'.format(fs_type) KubeUtils.create_pvc_and_wait_to_bound(self, pvc_name, sc_name) # Create Consumer pod pod_name = 'consumer-{}'.format(fs_type) pod = KubeUtils.get_fs_consumer_pod_template(pod_name, pvc_name) KubeUtils.create_pod(pod) def cleanup_pod(): KubeUtils.delete_pod(pod_name) KubeUtils.wait_for_pod_to_delete(pod_name) self.addCleanup(cleanup_pod) KubeUtils.wait_for_pod_to_be_running(pod_name)
def test_mixed_access_modes(self): # This test creates a PV with reclaimPolicy: Retain (making sure it is not deleted when the bounded PVC is deleted) # Then will create PVC's with different AccessModes to use the same PV. in between some PV clean needs to be done. # Create Storage Class with reclaimPolicy: Retain sc_name = 'sc-nvmesh-retain' KubeUtils.create_storage_class(sc_name, {'vpg': 'DEFAULT_RAID_10_VPG'}, reclaimPolicy='Retain') self.addCleanup(lambda: KubeUtils.delete_storage_class(sc_name)) # Create NVMesh Volume nvmesh_volume_name = "vol1" volume = Volume( name=nvmesh_volume_name, RAIDLevel=RAIDLevels.STRIPED_AND_MIRRORED_RAID_10, VPG='DEFAULT_RAID_10_VPG', capacity=5 * GiB, description="Volume for CSI Driver Static Provisioning") err, out = NVMeshUtils.getVolumeAPI().save([volume]) self.assertIsNone(err, 'Error Creating NVMesh Volume. %s' % err) create_res = out[0] self.assertTrue( create_res['success'], 'Error Creating NVMesh Volume. %s' % create_res['error']) self.addCleanup(lambda: NVMeshUtils.getVolumeAPI().delete([volume])) # Create PV pv_name = 'csi-testing-pv-vol1' volume_size = '5Gi' self.create_pv_for_static_prov(nvmesh_volume_name, pv_name, sc_name, volume_size) # Create PVC with accessMode ReadWriteOnce pvc_name = 'pvc-rwo' KubeUtils.create_pvc_and_wait_to_bound(self, pvc_name, sc_name, access_modes=['ReadWriteOnce'], storage=volume_size, volumeMode='Filesystem') self.addCleanup(lambda: KubeUtils.delete_pvc(pvc_name)) # Create Pod to create a file on the File System pod_name = 'pod-file-writer' cmd = 'echo hello > /vol/file1' pod = KubeUtils.get_shell_pod_template(pod_name, pvc_name, cmd) KubeUtils.create_pod(pod) self.addCleanup(lambda: KubeUtils.delete_pod_and_wait(pod_name)) KubeUtils.wait_for_pod_to_complete(pod_name) KubeUtils.delete_pod_and_wait(pod_name) # Delete the PVC KubeUtils.delete_pvc(pvc_name) KubeUtils.wait_for_pv_to_be_released(pv_name) # Make PV Available for the next PVC (by removing claimRef field from the PV ==OR== deleting and recreating the PV) KubeUtils.delete_pv(pv_name) KubeUtils.wait_for_pv_to_delete(pv_name) self.create_pv_for_static_prov(nvmesh_volume_name, pv_name, sc_name, volume_size) # Create PVC With ReadOnlyMany pvc_name = 'pvc-rox' KubeUtils.create_pvc_and_wait_to_bound(self, pvc_name, sc_name, access_modes=['ReadOnlyMany'], storage=volume_size, volumeMode='Filesystem') self.addCleanup(lambda: KubeUtils.delete_pvc(pvc_name)) # 7. Create 2 Pods that will read the File System - Should Succeed pod1_name = 'pod-file-reader1' cmd = 'cat /vol/file1' pod = KubeUtils.get_shell_pod_template(pod1_name, pvc_name, cmd) KubeUtils.create_pod(pod) self.addCleanup(lambda: KubeUtils.delete_pod_and_wait(pod1_name)) pod2_name = 'pod-file-reader2' pod = KubeUtils.get_shell_pod_template(pod2_name, pvc_name, cmd) KubeUtils.create_pod(pod) self.addCleanup(lambda: KubeUtils.delete_pod_and_wait(pod2_name)) KubeUtils.wait_for_pod_to_complete(pod2_name) # 8. Create 1 Pod that will try to write to the FileSystem - Should Fail pod_name = 'pod-file-writer' cmd = 'echo hello > /vol/file1' pod = KubeUtils.get_shell_pod_template(pod_name, pvc_name, cmd) KubeUtils.create_pod(pod) self.addCleanup(lambda: KubeUtils.delete_pod_and_wait(pod_name)) KubeUtils.wait_for_pod_to_fail(pod_name)