'Define a new volume based on an E-Series snapshot image.
This method should be synchronized on the snapshot id.
:param volume: a Cinder volume
:param image: an E-Series snapshot image
:return: the clone volume'

def _create_volume_from_snapshot(self, volume, image):

    label = utils.convert_uuid_to_es_fmt(volume['id'])
    size = volume['size']
    dst_vol = self._schedule_and_create_volume(label, size)
    src_vol = None
    try:
        src_vol = self._create_snapshot_volume(image)
        self._copy_volume_high_priority_readonly(src_vol, dst_vol)
        LOG.info('Created    volume    with    label    %s.', label)
    except exception.NetAppDriverException:
        with excutils.save_and_reraise_exception():
            self._client.delete_volume(dst_vol['volumeRef'])
    finally:
        if src_vol:
            try:
                self._client.delete_snapshot_volume(src_vol['id'])
            except exception.NetAppDriverException as e:
                LOG.error('Failure    restarting    snap    vol.    Error:    %s.', e)
        else:
            LOG.warning('Snapshot    volume    creation    failed    for    snapshot    %s.', image['id'])
    return dst_vol
