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))
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)
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)
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)
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)
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
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, )
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)
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, )
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)
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)
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)