'Creates a snapshot.'

def create_snapshot(self, snapshot):

    snapshot_id = snapshot['id'].replace('-', '')
    volume_id = snapshot['volume_id'].replace('-', '')
    LOG.debug('Create    Snapshot    %(snapshot)s    volume    %(volume)s.', {'snapshot': snapshot_id, 'volume': volume_id})
    model_update = {}
    part_id = self._get_part_id(volume_id)
    if (part_id is None):
        msg = (_('Failed    to    get    Partition    ID    for    volume    %(volume_id)s.') % {'volume_id': volume_id})
        LOG.error(msg)
        raise exception.VolumeBackendAPIException(data=msg)
    @lockutils.synchronized(('snapshot-' + part_id), 'infortrend-', True)
    def do_create_snapshot():
        self._execute('CreateSnapshot', 'part', part_id)
        (rc, tmp_snapshot_list) = self._execute('ShowSnapshot', ('part=%s' % part_id))
        return tmp_snapshot_list
    snapshot_list = do_create_snapshot()
    LOG.info('Create    success.    Snapshot:    %(snapshot)s,    Snapshot    ID    in    raid:    %(raid_snapshot_id)s,    volume:    %(volume)s.', {'snapshot': snapshot_id, 'raid_snapshot_id': snapshot_list[(-1)]['SI-ID'], 'volume': volume_id})
    model_update['provider_location'] = snapshot_list[(-1)]['SI-ID']
    return model_update
