def _ensure_flashcopy_safe_to_delete(self, flashcopy, volume_name):
     flashcopy_process = self._get_flashcopy_process(flashcopy.id)
     if flashcopy.backgroundcopy == "disabled":
         raise array_errors.ObjectIsStillInUseError(id_or_name=volume_name,
                                                    used_by=[flashcopy.representation])
     if flashcopy_process.out_of_sync_tracks != '0':
         raise array_errors.ObjectIsStillInUseError(id_or_name=volume_name,
                                                    used_by=[flashcopy_process.representation])
Пример #2
0
 def _safe_delete_fcmaps(self, object_name, fcmaps):
     unfinished_fcmaps = [
         fcmap for fcmap in fcmaps
         if fcmap.status != FCMAP_STATUS_DONE or fcmap.copy_rate == "0"
     ]
     if unfinished_fcmaps:
         raise array_errors.ObjectIsStillInUseError(
             id_or_name=object_name, used_by=unfinished_fcmaps)
     for fcmap in fcmaps:
         self._delete_fcmap(fcmap.id, force=False)
    def delete_volume(self, volume_id):
        logger.info("Deleting volume with id : {0}".format(volume_id))
        volume_name = self._get_object_name_by_wwn(volume_id)
        cli_snapshots = self.client.cmd.snapshot_list(vol=volume_name).as_list
        if cli_snapshots:
            raise controller_errors.ObjectIsStillInUseError(
                id_or_name=volume_id, used_by=cli_snapshots)
        try:
            self.client.cmd.vol_delete(vol=volume_name)
        except xcli_errors.VolumeBadNameError as ex:
            logger.exception(ex)
            raise controller_errors.ObjectNotFoundError(volume_name)

        except xcli_errors.OperationForbiddenForUserCategoryError as ex:
            logger.exception(ex)
            raise controller_errors.PermissionDeniedError(
                "delete vol : {0}".format(volume_name))

        logger.info("Finished volume deletion. id : {0}".format(volume_id))