'Create a clone volume from the source volume.
:param volume: clone volume
:param source_volume: source of the clone volume
:param extra_specs: extra specs
:param is_snapshot: boolean -- Defaults to False
:param from_snapvx: bool -- Defaults to False
:returns: dict -- cloneDict the cloned volume dictionary
:raises: VolumeBackendAPIException:'

def _create_cloned_volume(self, volume, source_volume, extra_specs, is_snapshot=False, from_snapvx=False):

    clone_name = volume.name
    snap_name = None
    LOG.info('Create    a    replica    from    Volume:    Clone    Volume:    %(clone_name)s    from    Source    Volume:    %(source_name)s.', {'clone_name': clone_name, 'source_name': source_volume.name})
    array = extra_specs[utils.ARRAY]
    is_clone_license = self.rest.is_snapvx_licensed(array)
    if from_snapvx:
        (source_device_id, snap_name) = self._parse_snap_info(array, source_volume)
    else:
        source_device_id = self._find_device_on_array(source_volume, extra_specs)
    if (not is_clone_license):
        exception_message = (_('SnapVx    feature    is    not    licensed    on    %(array)s.') % {'array': array})
        LOG.error(exception_message)
        raise exception.VolumeBackendAPIException(data=exception_message)
    self._sync_check(array, source_device_id, source_volume.name, extra_specs, tgt_only=True)
    if (not is_snapshot):
        clone_dict = self._create_replica(array, volume, source_device_id, extra_specs, snap_name=snap_name)
    else:
        clone_dict = self._create_snapshot(array, volume, source_device_id, extra_specs)
    LOG.debug('Leaving    _create_cloned_volume:    Volume:    %(clone_name)s    Source    Device    Id:    %(source_name)s    ', {'clone_name': clone_name, 'source_name': source_device_id})
    return clone_dict
