'Create a disco snapshot.'

def create_snapshot(self, snapshot):

    volume = api.volume_get(self.ctxt, snapshot['volume_id'])
    description = snapshot['display_description']
    vol_id = volume['provider_location']
    LOG.debug('Create    snapshot    of    volume    :    %(id)s,    description    :    %(desc)s.', {'id': vol_id, 'desc': description})
    reply = self.client.snapshotCreate(vol_id, (-1), (-1), description)
    status = reply['status']
    result = reply['result']
    LOG.debug('Create    snapshot    :    [status]    %(stat)s    -    [result]    %(res)s.', {'stat': six.text_type(status), 'res': result})
    if status:
        msg = (_('Error    while    creating    snapshot    [status]    %(stat)s    -    [result]    %(res)s.') % {'stat': six.text_type(status), 'res': result})
        LOG.error(msg)
        raise exception.VolumeBackendAPIException(data=msg)
    params = {'snapshot_id': int(result)}
    start_time = int(time.time())
    snapshot_request = DISCOCheck(self.client, params, start_time, 'snapshot_detail', self.configuration)
    timeout = self.configuration.disco_snapshot_check_timeout
    snapshot_request._monitor_request(timeout)
    snapshot['provider_location'] = result
    LOG.debug('snapshot    taken    successfully    on    volume    :    %(volume)s.', {'volume': volume['name']})
    return {'provider_location': result}
