def create_snapshot(self, snapshot): """Create a snapshot.""" provider_volume_id = self._get_provider_volumeID_from_snapshot( snapshot) provider_volumes = self.adpter.list_volumes( ex_volume_ids=[provider_volume_id]) if not provider_volumes: LOG.error('provider_volume %s is not found' % provider_volume_id) raise exception.VolumeNotFound(volume_id=snapshot['volume_id']) elif len(provider_volumes) > 1: LOG.error('volume %s has more than one provider_volume' % snapshot['volume_id']) raise exception_ex.ProviderMultiVolumeError( volume_id=snapshot['volume_id']) provider_snapshot = self.adpter.create_volume_snapshot( provider_volumes[0], snapshot['name']) if not provider_snapshot: raise exception_ex.ProviderCreateSnapshotError( snapshot_id=snapshot['id']) create_tags_func = getattr(self.adpter, 'ex_create_tags') if create_tags_func: create_tags_func(provider_snapshot, {'hybrid_cloud_snapshot_id': snapshot['id']}) ctx = cinder.context.get_admin_context() if ctx: self.db.snapshot_metadata_update( ctx, snapshot['id'], {'provider_snapshot_id': provider_snapshot.id}, False) model_update = {'provider_location': provider_snapshot.id} return model_update
def delete_volume(self, volume): """Delete a volume.""" provider_volume_id = self._get_provider_volumeid_from_volume(volume) if not provider_volume_id: LOG.error('NO Mapping between cinder volume and provider volume') return provider_volumes = self.adpter.list_volumes(ex_volume_ids=[provider_volume_id]) if not provider_volumes: LOG.error('provider_volume is not found') return #raise exception.VolumeNotFound(volume_id=volume['id']) elif len(provider_volumes) > 1: LOG.error('volume %s has more than one provider_volume' % volume['id']) raise exception_ex.ProviderMultiVolumeError(volume_id=volume['id']) delete_ret = self.adpter.destroy_volume(provider_volumes[0]) LOG.info("deleted volume return%d" % delete_ret)