'Create a volume efficiently from an existing image.
image_location is a string whose format depends on the
image service backend in use. The driver should use it
to determine whether cloning is possible.
Returns a dict of volume properties eg. provider_location,
boolean indicating whether cloning occurred.'

def clone_image(self, context, volume, image_location, image_meta, image_service):

    image_id = image_meta['id']
    cloned = False
    post_clone = False
    extra_specs = na_utils.get_volume_extra_specs(volume)
    try:
        cache_result = self._find_image_in_cache(image_id)
        if cache_result:
            cloned = self._clone_from_cache(volume, image_id, cache_result)
        else:
            cloned = self._direct_nfs_clone(volume, image_location, image_id)
        if cloned:
            self._do_qos_for_volume(volume, extra_specs)
            post_clone = self._post_clone_image(volume)
    except Exception as e:
        msg = (e.msg if getattr(e, 'msg', None) else e)
        LOG.info('Image    cloning    unsuccessful    for    image    %(image_id)s.    Message:    %(msg)s', {'image_id': image_id, 'msg': msg})
    finally:
        cloned = (cloned and post_clone)
        share = (volume['provider_location'] if cloned else None)
        bootable = (True if cloned else False)
        return ({'provider_location': share, 'bootable': bootable}, cloned)
