def get_nsx_router_id(session, cluster, neutron_router_id): """Return the NSX router uuid for a given neutron router. First, look up the Neutron database. If not found, execute a query on NSX platform as the mapping might be missing. """ if not neutron_router_id: return nsx_router_id = nsx_db.get_nsx_router_id( session, neutron_router_id) if not nsx_router_id: # Find logical router from backend. # This is a rather expensive query, but it won't be executed # more than once for each router in Neutron's lifetime nsx_routers = routerlib.query_lrouters( cluster, '*', filters={'tag': neutron_router_id, 'tag_scope': 'q_router_id'}) # Only one result expected # NOTE(salv-orlando): Not handling the case where more than one # port is found with the same neutron port tag if not nsx_routers: LOG.warn(_LW("Unable to find NSX router for Neutron router %s"), neutron_router_id) return nsx_router = nsx_routers[0] nsx_router_id = nsx_router['uuid'] with session.begin(subtransactions=True): # Create DB mapping nsx_db.add_neutron_nsx_router_mapping( session, neutron_router_id, nsx_router_id) return nsx_router_id
def create_router(self, context, router): result = nsxlib.create_logical_router( display_name=router['router'].get('name', 'a_router_with_no_name'), tier_0=True, edge_cluster_uuid=cfg.CONF.nsx_v3.default_edge_cluster_uuid) with context.session.begin(): router = super(NsxV3Plugin, self).create_router( context, router) nsx_db.add_neutron_nsx_router_mapping( context.session, router['id'], result['id']) return router
def create_router(self, context, router): tags = utils.build_v3_tags_payload(router["router"]) result = nsxlib.create_logical_router( display_name=router["router"].get("name", "a_router_with_no_name"), tier_0=True, edge_cluster_uuid=cfg.CONF.nsx_v3.default_edge_cluster_uuid, tags=tags, ) with context.session.begin(): router = super(NsxV3Plugin, self).create_router(context, router) nsx_db.add_neutron_nsx_router_mapping(context.session, router["id"], result["id"]) return router