def create(self, req, body): """Create a new backup.""" LOG.debug('Creating new backup %s', body) context = req.environ['cinder.context'] req_version = req.api_version_request backup = body['backup'] container = backup.get('container', None) volume_id = backup['volume_id'] self.validate_name_and_description(backup, check_length=False) name = backup.get('name', None) description = backup.get('description', None) incremental = strutils.bool_from_string(backup.get( 'incremental', False), strict=True) force = strutils.bool_from_string(backup.get('force', False), strict=True) snapshot_id = backup.get('snapshot_id', None) metadata = backup.get('metadata', None) if req_version.matches( mv.BACKUP_METADATA) else None if req_version.matches(mv.BACKUP_AZ): availability_zone = backup.get('availability_zone', None) else: availability_zone = None az_text = ' in az %s' % availability_zone if availability_zone else '' LOG.info( "Creating backup of volume %(volume_id)s in container" " %(container)s%(az)s", { 'volume_id': volume_id, 'container': container, 'az': az_text }, context=context) try: new_backup = self.backup_api.create(context, name, description, volume_id, container, incremental, availability_zone, force, snapshot_id, metadata) except (exception.InvalidVolume, exception.InvalidSnapshot, exception.InvalidVolumeMetadata, exception.InvalidVolumeMetadataSize) as error: raise exc.HTTPBadRequest(explanation=error.msg) # Other not found exceptions will be handled at the wsgi level except exception.ServiceNotFound as error: raise exc.HTTPServiceUnavailable(explanation=error.msg) retval = self._view_builder.summary(req, dict(new_backup)) return retval
def create(self, req, body): """Create a new backup.""" LOG.debug('Creating new backup %s', body) context = req.environ['cinder.context'] req_version = req.api_version_request backup = body['backup'] container = backup.get('container', None) volume_id = backup['volume_id'] self.validate_name_and_description(backup, check_length=False) name = backup.get('name', None) description = backup.get('description', None) incremental = strutils.bool_from_string(backup.get( 'incremental', False), strict=True) force = strutils.bool_from_string(backup.get( 'force', False), strict=True) snapshot_id = backup.get('snapshot_id', None) metadata = backup.get('metadata', None) if req_version.matches( mv.BACKUP_METADATA) else None if req_version.matches(mv.BACKUP_AZ): availability_zone = backup.get('availability_zone', None) else: availability_zone = None az_text = ' in az %s' % availability_zone if availability_zone else '' LOG.info("Creating backup of volume %(volume_id)s in container" " %(container)s%(az)s", {'volume_id': volume_id, 'container': container, 'az': az_text}, context=context) try: new_backup = self.backup_api.create(context, name, description, volume_id, container, incremental, availability_zone, force, snapshot_id, metadata) except (exception.InvalidVolume, exception.InvalidSnapshot, exception.InvalidVolumeMetadata, exception.InvalidVolumeMetadataSize) as error: raise exc.HTTPBadRequest(explanation=error.msg) # Other not found exceptions will be handled at the wsgi level except exception.ServiceNotFound as error: raise exc.HTTPServiceUnavailable(explanation=error.msg) retval = self._view_builder.summary(req, dict(new_backup)) return retval