コード例 #1
0
 def is_volume_has_snapshots(self, volume_id):
     try:
         volume_name = self._get_vol_by_wwn(volume_id)
         return bool(self.client.cmd.snapshot_list(vol=volume_name).as_list)
     except xcli_errors.IllegalValueForArgumentError as ex:
         logger.exception(ex)
         raise controller_errors.IllegalObjectID(ex.status)
コード例 #2
0
 def _get_cli_object_by_wwn(self, volume_id, not_exist_err=False):
     try:
         cli_object = self.client.cmd.vol_list(
             wwn=volume_id).as_single_element
     except xcli_errors.IllegalValueForArgumentError as ex:
         logger.exception(ex)
         raise array_errors.IllegalObjectID(ex.status)
     if not cli_object and not_exist_err:
         raise array_errors.ObjectNotFoundError(volume_id)
     return cli_object
コード例 #3
0
 def _get_api_volume_by_id(self, volume_id, not_exist_err=True):
     try:
         volume = self.client.get_volume(volume_id)
         volume.flashcopy = self.client.get_flashcopies_by_volume(volume.id)
         return volume
     except exceptions.NotFound:
         if not_exist_err:
             raise array_errors.ObjectNotFoundError(volume_id)
     except (exceptions.ClientError, exceptions.InternalServerError) as ex:
         if INCORRECT_ID in str(ex.message).upper():
             raise array_errors.IllegalObjectID(volume_id)
コード例 #4
0
 def get_snapshot_by_id(self, snapshot_id):
     try:
         cli_snapshot = self.client.cmd.vol_list(wwn=snapshot_id).as_single_element
     except xcli_errors.IllegalValueForArgumentError as ex:
         logger.exception(ex)
         raise controller_errors.IllegalObjectID(ex.status)
     if not cli_snapshot:
         return None
     if not cli_snapshot.master_name:
         raise controller_errors.SnapshotIdBelongsToVolumeError(snapshot_id, self.endpoint)
     return self._generate_snapshot_response(cli_snapshot)
コード例 #5
0
 def _get_cli_volume_by_wwn(self, volume_id, not_exist_err=False):
     filter_value = 'vdisk_UID=' + volume_id
     try:
         cli_volume = self.client.svcinfo.lsvdisk(
             bytes=True, filtervalue=filter_value).as_single_element
     except (svc_errors.CommandExecutionError, CLIFailureError) as ex:
         if not is_warning_message(ex.my_message):
             if any(msg_id in ex.my_message
                    for msg_id in (NON_ASCII_CHARS, INVALID_FILTER_VALUE)):
                 raise array_errors.IllegalObjectID(ex.my_message)
             raise ex
     if not cli_volume and not_exist_err:
         raise array_errors.ObjectNotFoundError(volume_id)
     return cli_volume
コード例 #6
0
 def get_object_by_id(self, object_id, object_type):
     try:
         cli_object = self._get_cli_object_by_wwn(object_id)
     except xcli_errors.IllegalValueForArgumentError as ex:
         logger.exception(ex)
         raise controller_errors.IllegalObjectID(ex.status)
     if not cli_object:
         return None
     if object_type is controller_config.SNAPSHOT_TYPE_NAME:
         if not cli_object.master_name:
             raise controller_errors.ExpectedSnapshotButFoundVolumeError(
                 object_id, self.endpoint)
         return self._generate_snapshot_response(cli_object)
     return self._generate_volume_response(cli_object)
コード例 #7
0
 def _expand_cli_volume(self, cli_volume, increase_in_blocks):
     try:
         self.client.cmd.vol_resize(vol=cli_volume.name,
                                    size_blocks=increase_in_blocks)
     except xcli_errors.IllegalNameForObjectError as ex:
         logger.exception(ex)
         raise controller_errors.IllegalObjectID(ex.status)
     except xcli_errors.VolumeBadNameError as ex:
         logger.exception(ex)
         raise controller_errors.ObjectNotFoundError(cli_volume.id)
     except xcli_errors.CommandFailedRuntimeError as ex:
         logger.exception(ex)
         if NO_ALLOCATION_SPACE_ERROR in ex.status:
             raise controller_errors.NotEnoughSpaceInPool(
                 cli_volume.pool_name)
         else:
             raise ex