'Create a new consistency group from a source.
The source can be a CG snapshot or a CG. Note that
this does not require volume_types as the "create"
API above.'

@wsgi.response(http_client.ACCEPTED)
def create_from_src(self, req, body):

    LOG.debug('Creating    new    consistency    group    %s.', body)
    self.assert_valid_body(body, 'consistencygroup-from-src')
    context = req.environ['cinder.context']
    consistencygroup = body['consistencygroup-from-src']
    self.validate_name_and_description(consistencygroup)
    name = consistencygroup.get('name', None)
    description = consistencygroup.get('description', None)
    cgsnapshot_id = consistencygroup.get('cgsnapshot_id', None)
    source_cgid = consistencygroup.get('source_cgid', None)
    if ((not cgsnapshot_id) and (not source_cgid)):
        msg = (_("Either    'cgsnapshot_id'    or    'source_cgid'    must    be    provided    to    create    consistency    group    %(name)s    from    source.") % {'name': name})
        raise exc.HTTPBadRequest(explanation=msg)
    if (cgsnapshot_id and source_cgid):
        msg = (_("Cannot    provide    both    'cgsnapshot_id'    and    'source_cgid'    to    create    consistency    group    %(name)s    from    source.") % {'name': name})
        raise exc.HTTPBadRequest(explanation=msg)
    if cgsnapshot_id:
        LOG.info('Creating    consistency    group    %(name)s    from    cgsnapshot    %(snap)s.', {'name': name, 'snap': cgsnapshot_id})
    elif source_cgid:
        LOG.info('Creating    consistency    group    %(name)s    from    source    consistency    group    %(source_cgid)s.', {'name': name, 'source_cgid': source_cgid})
    try:
        if source_cgid:
            self._get(context, source_cgid)
        if cgsnapshot_id:
            self._get_cgsnapshot(context, cgsnapshot_id)
        consistencygroup_api.check_policy(context, 'create')
        new_group = self.group_api.create_from_src(context, name, description, cgsnapshot_id, source_cgid)
    except exception.NotFound:
        raise
    except exception.CinderException as error:
        raise exc.HTTPBadRequest(explanation=error.msg)
    retval = self._view_builder.summary(req, new_group)
    return retval
