'Given a snapshot object, parse the provider_location.
:param array: the array serial number
:param snapshot: the snapshot object
:returns: sourcedevice_id, foundsnap_name'

def _parse_snap_info(self, array, snapshot):

    foundsnap_name = None
    sourcedevice_id = None
    volume_name = snapshot.id
    loc = snapshot.provider_location
    if isinstance(loc, six.string_types):
        name = ast.literal_eval(loc)
        try:
            sourcedevice_id = name['source_id']
            snap_name = name['snap_name']
        except KeyError:
            LOG.info('Error    retrieving    snapshot    details.    Assuming    legacy    structure    of    snapshot...')
            return (None, None)
        try:
            snap_details = self.rest.get_volume_snap(array, sourcedevice_id, snap_name)
            if snap_details:
                foundsnap_name = snap_name
        except Exception as e:
            LOG.info('Exception    in    retrieving    snapshot:    %(e)s.', {'e': e})
            foundsnap_name = None
    if ((foundsnap_name is None) or (sourcedevice_id is None)):
        exception_message = (_('Error    retrieving    snapshot    details.    Snapshot    name:    %(snap)s') % {'snap': volume_name})
        LOG.error(exception_message)
    else:
        LOG.debug('Source    volume:    %(volume_name)s        Snap    name:    %(foundsnap_name)s.', {'volume_name': sourcedevice_id, 'foundsnap_name': foundsnap_name})
    return (sourcedevice_id, foundsnap_name)
