'Get the NFS share, the NFS mount, and the volume from reference
Determine the NFS share point, the NFS mount point, and the volume
(with possible path) from the given volume reference. Raise exception
if unsuccessful.
:param vol_ref: Driver-specific information used to identify a volume
:return:        NFS Share, NFS mount, volume path or raise error'

def _get_share_mount_and_vol_from_vol_ref(self, vol_ref):

    if ('source-name' not in vol_ref):
        reason = _('Reference    must    contain    source-name    element.')
        raise exception.ManageExistingInvalidReference(existing_ref=vol_ref, reason=reason)
    vol_ref_name = vol_ref['source-name']
    self._ensure_shares_mounted()
    vol_ref_share = self._convert_vol_ref_share_name_to_share_ip(vol_ref_name)
    for nfs_share in self._mounted_shares:
        cfg_share = self._convert_vol_ref_share_name_to_share_ip(nfs_share)
        (orig_share, work_share, file_path) = vol_ref_share.partition(cfg_share)
        if (work_share == cfg_share):
            file_path = file_path[1:]
            LOG.debug('Found    possible    share    %s;    checking    mount.', work_share)
            nfs_mount = self._get_mount_point_for_share(nfs_share)
            vol_full_path = os.path.join(nfs_mount, file_path)
            if os.path.isfile(vol_full_path):
                LOG.debug('Found    share    %(share)s    and    vol    %(path)s    on    mount    %(mnt)s', {'share': nfs_share, 'path': file_path, 'mnt': nfs_mount})
                return (nfs_share, nfs_mount, file_path)
        else:
            LOG.debug('vol_ref    %(ref)s    not    on    share    %(share)s.', {'ref': vol_ref_share, 'share': nfs_share})
    raise exception.ManageExistingInvalidReference(existing_ref=vol_ref, reason=_('Volume    not    found    on    configured    storage    backend.'))
