예제 #1
0
    def _do_ensure_external_network_default_value_callback(
            context, request, orig, network):
        is_default = request.get(api_const.IS_DEFAULT)
        if is_default is None:
            return
        if is_default:
            # ensure only one default external network at any given time
            pager = base_obj.Pager(limit=1)
            objs = net_obj.ExternalNetwork.get_objects(context,
                                                       _pager=pager,
                                                       is_default=True)
            if objs:
                if objs[0] and network['id'] != objs[0].network_id:
                    raise exceptions.DefaultExternalNetworkExists(
                        net_id=objs[0].network_id)

        if orig and orig.get(api_const.IS_DEFAULT) == is_default:
            return
        network[api_const.IS_DEFAULT] = is_default
        # Reflect the status of the is_default on the create/update request
        obj = net_obj.ExternalNetwork.get_object(context,
                                                 network_id=network['id'])
        if obj:
            obj.is_default = is_default
            obj.update()
예제 #2
0
파일: db.py 프로젝트: zl2017/neutron
def _ensure_external_network_default_value_callback(
    resource, event, trigger, context, request, network, **kwargs):
    """Ensure the is_default db field matches the create/update request."""
    is_default = request.get(IS_DEFAULT)
    if is_default is None:
        return
    if is_default:
        # ensure there is only one default external network at any given time
        pager = base_obj.Pager(limit=1)
        objs = net_obj.ExternalNetwork.get_objects(context,
            _pager=pager, is_default=True)
        if objs:
            if objs[0] and network['id'] != objs[0].network_id:
                raise exceptions.DefaultExternalNetworkExists(
                    net_id=objs[0].network_id)

    orig = kwargs.get('original_network')
    if orig and orig.get(IS_DEFAULT) == is_default:
        return
    network[IS_DEFAULT] = is_default
    # Reflect the status of the is_default on the create/update request
    obj = net_obj.ExternalNetwork.get_object(context,
                                             network_id=network['id'])
    if obj:
        obj.is_default = is_default
        obj.update()
예제 #3
0
def _ensure_external_network_default_value_callback(
    resource, event, trigger, context, request, network):
    """Ensure the is_default db field matches the create/update request."""
    is_default = request.get(IS_DEFAULT, False)
    if event in (events.BEFORE_CREATE, events.BEFORE_UPDATE) and is_default:
        # ensure there is only one default external network at any given time
        obj = (context.session.query(external_net_db.ExternalNetwork).
            filter_by(is_default=True)).first()
        if obj and network['id'] != obj.network_id:
            raise exceptions.DefaultExternalNetworkExists(
                net_id=obj.network_id)

    # Reflect the status of the is_default on the create/update request
    obj = (context.session.query(external_net_db.ExternalNetwork).
        filter_by(network_id=network['id']))
    obj.update({IS_DEFAULT: is_default})
예제 #4
0
파일: db.py 프로젝트: zhouronghua/neutron
def _ensure_external_network_default_value_callback(resource, event, trigger,
                                                    context, request, network):
    """Ensure the is_default db field matches the create/update request."""
    is_default = request.get(IS_DEFAULT)
    if event in (events.BEFORE_CREATE, events.BEFORE_UPDATE) and is_default:
        # ensure there is only one default external network at any given time
        pager = base_obj.Pager(limit=1)
        objs = net_obj.ExternalNetwork.get_objects(context,
                                                   _pager=pager,
                                                   is_default=True)
        if objs:
            if objs[0] and network['id'] != objs[0].network_id:
                raise exceptions.DefaultExternalNetworkExists(
                    net_id=objs[0].network_id)

    # Reflect the status of the is_default on the create/update request
    if is_default is not None:
        obj = net_obj.ExternalNetwork.get_object(context,
                                                 network_id=network['id'])
        if obj:
            obj.is_default = is_default
            obj.update()