def create_pv_for_static_prov(self, nvmesh_volume_name, pv_name, sc_name,
                                  volume_size):
        all_access_modes = ['ReadWriteOnce', 'ReadOnlyMany', 'ReadWriteMany']
        pv = KubeUtils.get_pv_for_static_provisioning(
            pv_name=pv_name,
            nvmesh_volume_name=nvmesh_volume_name,
            accessModes=all_access_modes,
            sc_name=sc_name,
            volume_size=volume_size,
            volumeMode='Filesystem')
        core_api.create_persistent_volume(pv)

        def pv_cleanup(pv_name):
            try:
                KubeUtils.delete_pv(pv_name)
            except ApiException:
                pass

        self.addCleanup(lambda: pv_cleanup(pv_name))
        pv_list = core_api.list_persistent_volume(
            field_selector='metadata.name={}'.format(pv_name))
        self.assertIsNotNone(pv_list)
        self.assertTrue(len(pv_list.items))
        self.assertEqual(pv_list.items[0].metadata.name, pv_name)
        return volume_size
Example #2
0
    def test_static_provisioning(self):
        # Create NVMesh Volume
        nvmesh_volume_name = "csi-testing-static-prov"
        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 = 'pv-name-in-k8s'
        accessModes = ['ReadWriteOnce']
        volume_size = '5Gi'
        sc_name = 'nvmesh-raid10'
        pv = KubeUtils.get_pv_for_static_provisioning(pv_name,
                                                      nvmesh_volume_name,
                                                      accessModes, sc_name,
                                                      volume_size)

        core_api.create_persistent_volume(pv)

        self.addCleanup(lambda: core_api.delete_persistent_volume(pv_name))

        pv_list = core_api.list_persistent_volume(
            field_selector='metadata.name={}'.format(pv_name))
        self.assertIsNotNone(pv_list)
        self.assertTrue(len(pv_list.items))
        self.assertEqual(pv_list.items[0].metadata.name, pv_name)

        # Create PVC
        pvc_name = 'pvc-static-prov'
        KubeUtils.create_pvc_and_wait_to_bound(self,
                                               pvc_name,
                                               sc_name,
                                               access_modes=accessModes,
                                               storage=volume_size,
                                               volumeMode='Block')

        self.addCleanup(lambda: KubeUtils.delete_pvc(pvc_name))

        # Create Consumer pod
        pod_name = 'pod-static-prov'
        cmd = 'echo hello ; while true ; do sleep 60; done'
        pod = KubeUtils.get_shell_pod_template(pod_name,
                                               pvc_name,
                                               cmd,
                                               volume_mode_block=True)
        KubeUtils.create_pod(pod)

        self.addCleanup(lambda: KubeUtils.delete_pod_and_wait(pod_name))

        KubeUtils.wait_for_pod_to_be_running(pod_name)