'Create new volume from other\'s snapshot on appliance.
:param volume: reference of volume to be created
:param snapshot: reference of source snapshot'

def create_volume_from_snapshot(self, volume, snapshot):

    self._ensure_shares_mounted()
    snapshot_vol = self._get_snapshot_volume(snapshot)
    nfs_share = snapshot_vol['provider_location']
    volume['provider_location'] = nfs_share
    nms = self.share2nms[nfs_share]
    (vol, dataset) = self._get_share_datasets(nfs_share)
    snapshot_name = ('%s/%s/%s@%s' % (vol, dataset, snapshot['volume_name'], snapshot['name']))
    folder = ('%s/%s' % (dataset, volume['name']))
    nms.folder.clone(snapshot_name, ('%s/%s' % (vol, folder)))
    try:
        self._share_folder(nms, vol, folder)
    except exception.NexentaException:
        try:
            nms.folder.destroy(('%s/%s' % (vol, folder)), '')
        except exception.NexentaException:
            LOG.warning('Cannot    destroy    cloned    folder:    %(vol)s/%(folder)s', {'vol': vol, 'folder': folder})
        raise
    if (self._get_nfs_server_version(nfs_share) < 4):
        (sub_share, mnt_path) = self._get_subshare_mount_point(nfs_share, volume)
        self._ensure_share_mounted(sub_share, mnt_path)
    if (('size' in volume) and (volume['size'] > snapshot['volume_size'])):
        self.extend_volume(volume, volume['size'])
    return {'provider_location': volume['provider_location']}
