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])
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))