Beispiel #1
0
def volumepool_return(pool_name, volume_name):
    manager = VolumeManager()
    mark = request.args.get("mark", "False") == "True"
    ref = request.args.get("current_ref", None)
    if mark:
        # mark volume for deletion and then put it in the pool
        manager.delete(volume_name, mark=mark)
    manager.put_in_pool(pool_name, volume_name, current_ref=ref)
    return jsonify(result="ok")
Beispiel #2
0
    def delete(self, name, delete_pod=True, force=False):
        """
        Delete the task from kubernetes and returns the final status
        Args:
            name: string that is the unique job name

        Returns: Last status of the job

        """
        logger.debug("Task delete for {}".format(name))
        self.jobname = name

        with TaskOperation(self):
            job_status = self._get_job(name)
            status = self.status(name, status_obj=job_status)

            ax_resources = self._get_ax_resources(job_status)
            self.service_instance_id = job_status.metadata.labels.get(
                "service_instance_id", None)
            self._delete_job(name, delete_pod, force)

        # cleanup other ax_resources
        volumepools = ax_resources.get("volumepools", [])
        for poolname, volname in volumepools:
            vmanager = VolumeManager()
            logger.debug("Return volume {} to volume pool {}".format(
                volname, poolname))
            try:
                vmanager.put_in_pool(poolname,
                                     volname,
                                     current_ref=self.service_instance_id)
            except AXVolumeOwnershipException as e:
                logger.debug(
                    "Volume {} has already been returned for job {}. This is normal"
                    .format(volname, name))

        service_endpoint = ax_resources.get("service_endpoint", None)
        if service_endpoint:
            endpoint_name = service_endpoint["name"]
            nginx_controller = service_endpoint.get("use-nginx", None)
            if nginx_controller is None and "persist" in service_endpoint and service_endpoint[
                    "persist"]:
                logger.debug(
                    "Do not delete service endpoint {} as persist is set to true"
                    .format(endpoint_name))
            else:
                s = ServiceEndpoint(endpoint_name)
                s.delete()

                if nginx_controller:
                    r = IngressRules(endpoint_name, nginx_controller)
                    r.delete()

        return status
Beispiel #3
0
 def test_2(self):
     """
     Basic test for volume pools
     """
     manager = VolumeManager()
     manager.create_pool("testpool1", "1", None)
     volname1 = manager.get_from_pool("testpool1", "test1")
     logger.debug("Got the following volume for test1 {}".format(volname1))
     volname2 = manager.get_from_pool("testpool1", "test2")
     logger.debug("Got the following volume for test2 {}".format(volname2))
     manager.put_in_pool("testpool1", volname1)
     manager.put_in_pool("testpool1", volname2)
     manager.delete_pool("testpool1")
Beispiel #4
0
    def test_4(self):
        """
        Test conditions that involve marking a volume for deletion
        """
        manager = VolumeManager()
        manager.create_pool("testdeletion", "2", None)
        volname1 = manager.get_from_pool("testdeletion", "ref1")

        # this resizes the pool causing volname1 to be marked for deletion
        manager.create_pool("testdeletion", "3", None)
        volname2 = manager.get_from_pool("testdeletion", "ref2")

        # volname1 should not be deleted
        manager.put_in_pool("testdeletion", volname1)

        # volname2 is put back in pool
        manager.put_in_pool("testdeletion", volname2)

        # volume pool can be deleted as it has no refs
        manager.delete_pool("testdeletion")
Beispiel #5
0
    def test_3(self):
        """
        Test error conditions in volume pools
        """
        manager = VolumeManager()
        manager.create_pool("testpool2", "1", None)
        volname1 = manager.get_from_pool("testpool2", "t1")
        logger.debug("Got the following volume {}".format(volname1))

        # get from pool with the same ref should give a different vol
        volname2 = manager.get_from_pool("testpool2", "t1")
        self.assertNotEquals(volname1, volname2)
        manager.put_in_pool("testpool2", volname2)

        # now try to delete a pool with an active reference
        with self.assertRaises(AXVolumeException):
            manager.delete_pool("testpool2")
        logger.debug(manager.get_pools_for_unit_test())

        # put an invalid pvc back in pool
        with self.assertRaises(AssertionError):
            manager.put_in_pool("testpool2", "somevolname")
        manager.put_in_pool("testpool2", volname1)

        # delete a non existent pool should not raise an error
        manager.delete_pool("testpool")
        manager.delete_pool("testpool2")

        # now that pool is deleted, get from it
        with self.assertRaises(KeyError):
            manager.get_from_pool("testpool2", "t2")