示例#1
0
    def delete_bgpvpn(self, context, id):
        try:
            bgpvpn_obj = self._vnc_api.bgpvpn_read(
                id=id,
                fields=[
                    'virtual_network_back_refs', 'logical_router_back_refs'
                ])
        except vnc_exc.NoIdError:
            raise bgpvpn_ext.BGPVPNNotFound(id=id)

        for vn_ref in bgpvpn_obj.get_virtual_network_back_refs() or []:
            try:
                vn_obj = self._vnc_api.virtual_network_read(id=vn_ref['uuid'])
            except vnc_exc.NoIdError:
                continue
            vn_obj.del_bgpvpn(bgpvpn_obj)
            self._vnc_api.virtual_network_update(vn_obj)

        for lr_ref in bgpvpn_obj.get_logical_router_back_refs() or []:
            try:
                lr_obj = self._vnc_api.logical_router_read(id=lr_ref['uuid'])
            except vnc_exc.NoIdError:
                continue
            lr_obj.del_bgpvpn(bgpvpn_obj)
            self._vnc_api.logical_router_update(lr_obj)

        try:
            self._vnc_api.bgpvpn_delete(id=id)
        except (vnc_exc.RefsExistError, vnc_exc.BadRequest) as e:
            raise neutron_exc.BadRequest(resource='bgpvpn', msg=str(e))
示例#2
0
    def get_bgpvpn(self, context, id, fields=None):
        LOG.debug("get_bgpvpn called for id %s with fields = %s" %
                  (id, fields))

        oc_client = self._get_opencontrail_api_client(context)

        try:
            bgpvpn = json.loads(oc_client.kv_store('RETRIEVE', key=id))
        except (oc_exc.OpenContrailAPINotFound, ValueError):
            raise bgpvpn_ext.BGPVPNNotFound(id=id)

        if (not isinstance(bgpvpn, dict) or 'bgpvpn' not in bgpvpn):
            raise bgpvpn_ext.BGPVPNNotFound(id=id)

        bgpvpn = bgpvpn['bgpvpn']
        if not fields or 'networks' in fields:
            bgpvpn['networks'] = [
                net_assoc['network_id']
                for net_assoc in self.get_net_assocs(context, id)
            ]
        return utils.make_bgpvpn_dict(bgpvpn, fields)
示例#3
0
 def update_bgpvpn(self, context, id, bgpvpn):
     if 'route_distinguishers' in bgpvpn:
         raise bgpvpn_ext.BGPVPNRDNotSupported(
             driver=CONTRAIL_BGPVPN_DRIVER_NAME)
     try:
         bgpvpn_obj = self._vnc_api.bgpvpn_read(id=id)
     except vnc_exc.NoIdError:
         raise bgpvpn_ext.BGPVPNNotFound(id=id)
     bgpvpn_obj = self._neutron_dict_to_bgpvpn(bgpvpn_obj, bgpvpn)
     try:
         self._vnc_api.bgpvpn_update(bgpvpn_obj)
     except vnc_exc.BadRequest as e:
         raise neutron_exc.BadRequest(resource='bgpvpn', msg=str(e))
     return self._bgpvpn_to_neutron_dict(bgpvpn_obj)
示例#4
0
 def get_router_assoc(self, context, assoc_id, bgpvpn_id, fields=None):
     try:
         bgpvpn_obj = self._vnc_api.bgpvpn_read(
             id=bgpvpn_id, fields=['logical_router_back_refs'])
     except vnc_exc.NoIdError:
         raise bgpvpn_ext.BGPVPNNotFound(id=bgpvpn_id)
     associated_routers = [
         lr_ref['uuid']
         for lr_ref in bgpvpn_obj.get_logical_router_back_refs() or []
     ]
     if assoc_id not in associated_routers:
         raise bgpvpn_ext.BGPVPNRouterAssocNotFound(id=assoc_id,
                                                    bgpvpn_id=bgpvpn_id)
     return bgpvpn_utils.make_router_assoc_dict(
         assoc_id, bgpvpn_obj.parent_uuid.replace('-', ''), bgpvpn_id,
         assoc_id)
示例#5
0
 def get_net_assoc(self, context, assoc_id, bgpvpn_id, fields=None):
     try:
         bgpvpn_obj = self._vnc_api.bgpvpn_read(
             id=bgpvpn_id, fields=['virtual_network_back_refs'])
     except vnc_exc.NoIdError:
         raise bgpvpn_ext.BGPVPNNotFound(id=bgpvpn_id)
     associated_networks = [
         vn_ref['uuid']
         for vn_ref in bgpvpn_obj.get_virtual_network_back_refs() or []
     ]
     if assoc_id not in associated_networks:
         raise bgpvpn_ext.BGPVPNNetAssocNotFound(id=assoc_id,
                                                 bgpvpn_id=bgpvpn_id)
     return bgpvpn_utils.make_net_assoc_dict(
         assoc_id, bgpvpn_obj.parent_uuid.replace('-', ''), bgpvpn_id,
         assoc_id)
示例#6
0
 def get_router_assocs(self, context, bgpvpn_id, filters=None, fields=None):
     try:
         bgpvpn_obj = self._vnc_api.bgpvpn_read(
             id=bgpvpn_id, fields=['logical_router_back_refs'])
     except vnc_exc.NoIdError:
         raise bgpvpn_ext.BGPVPNNotFound(id=bgpvpn_id)
     bgpvpn_router_assocs = []
     for lr_ref in bgpvpn_obj.get_logical_router_back_refs() or []:
         bgpvpn_router_assoc = bgpvpn_utils.make_router_assoc_dict(
             lr_ref['uuid'],
             bgpvpn_obj.parent_uuid.replace('-', ''),
             bgpvpn_id,
             lr_ref['uuid'],
             fields,
         )
         if bgpvpn_utils.filter_resource(bgpvpn_router_assoc, filters):
             bgpvpn_router_assocs.append(bgpvpn_router_assoc)
     return bgpvpn_router_assocs
示例#7
0
 def delete_router_assoc(self, context, assoc_id, bgpvpn_id):
     try:
         bgpvpn_obj = self._vnc_api.bgpvpn_read(id=bgpvpn_id)
     except vnc_exc.NoIdError:
         raise bgpvpn_ext.BGPVPNNotFound(id=bgpvpn_id)
     try:
         lr_obj = self._vnc_api.logical_router_read(id=assoc_id)
     except vnc_exc.NoIdError:
         raise neutron_l3_ext.RouterNotFound(router_id=assoc_id)
     lr_obj.del_bgpvpn(bgpvpn_obj)
     try:
         self._vnc_api.logical_router_update(lr_obj)
     except vnc_exc.BadRequest as exc:
         raise neutron_exc.BadRequest(resource='router_association',
                                      msg=str(exc))
     return bgpvpn_utils.make_router_assoc_dict(
         assoc_id,
         bgpvpn_obj.parent_uuid.replace('-', ''),
         bgpvpn_id,
         assoc_id,
     )
示例#8
0
 def create_router_assoc(self, context, bgpvpn_id, router_association):
     try:
         bgpvpn_obj = self._vnc_api.bgpvpn_read(id=bgpvpn_id)
     except vnc_exc.NoIdError:
         raise bgpvpn_ext.BGPVPNNotFound(id=bgpvpn_id)
     router_id = router_association['router_id']
     try:
         lr_obj = self._vnc_api.logical_router_read(id=router_id)
     except vnc_exc.NoIdError:
         raise neutron_l3_ext.RouterNotFound(router_id=router_id)
     lr_obj.add_bgpvpn(bgpvpn_obj)
     try:
         self._vnc_api.logical_router_update(lr_obj)
     except vnc_exc.BadRequest as exc:
         raise neutron_exc.BadRequest(resource='router_association',
                                      msg=str(exc))
     # Use the router ID as association id
     router_association['id'] = router_id
     router_association['bgpvpn_id'] = bgpvpn_id
     router_association.pop('project_id', None)
     return bgpvpn_utils.make_router_assoc_dict(**router_association)
示例#9
0
 def delete_net_assoc(self, context, assoc_id, bgpvpn_id):
     try:
         bgpvpn_obj = self._vnc_api.bgpvpn_read(id=bgpvpn_id)
     except vnc_exc.NoIdError:
         raise bgpvpn_ext.BGPVPNNotFound(id=bgpvpn_id)
     try:
         vn_obj = self._vnc_api.virtual_network_read(id=assoc_id)
     except vnc_exc.NoIdError:
         raise neutron_exc.NetworkNotFound(net_id=assoc_id)
     vn_obj.del_bgpvpn(bgpvpn_obj)
     try:
         self._vnc_api.virtual_network_update(vn_obj)
     except vnc_exc.BadRequest as exc:
         raise neutron_exc.BadRequest(resource='network_association',
                                      msg=str(exc))
     return bgpvpn_utils.make_net_assoc_dict(
         assoc_id,
         bgpvpn_obj.parent_uuid.replace('-', ''),
         bgpvpn_id,
         assoc_id,
     )
示例#10
0
 def create_net_assoc(self, context, bgpvpn_id, network_association):
     try:
         bgpvpn_obj = self._vnc_api.bgpvpn_read(id=bgpvpn_id)
     except vnc_exc.NoIdError:
         raise bgpvpn_ext.BGPVPNNotFound(id=bgpvpn_id)
     net_id = network_association['network_id']
     try:
         vn_obj = self._vnc_api.virtual_network_read(id=net_id)
     except vnc_exc.NoIdError:
         raise neutron_exc.NetworkNotFound(net_id=net_id)
     vn_obj.add_bgpvpn(bgpvpn_obj)
     try:
         self._vnc_api.virtual_network_update(vn_obj)
     except vnc_exc.BadRequest as exc:
         raise neutron_exc.BadRequest(resource='network_association',
                                      msg=str(exc))
     # Use the network ID as association id
     network_association['id'] = net_id
     network_association['bgpvpn_id'] = bgpvpn_id
     network_association.pop('project_id', None)
     return bgpvpn_utils.make_net_assoc_dict(**network_association)
示例#11
0
 def _get_bgpvpn(self, context, id):
     try:
         return model_query.get_by_id(context, BGPVPN, id)
     except exc.NoResultFound:
         raise bgpvpn_ext.BGPVPNNotFound(id=id)
示例#12
0
 def get_bgpvpn(self, context, id, fields=None):
     try:
         bgpvpn_obj = self._vnc_api.bgpvpn_read(id=id, fields=fields)
     except vnc_exc.NoIdError:
         raise bgpvpn_ext.BGPVPNNotFound(id=id)
     return self._bgpvpn_to_neutron_dict(bgpvpn_obj)