def _update_routes_on_tlr(
        self, context, router_id,
        newnexthop=vcns_const.INTEGRATION_EDGE_IPADDRESS,
        metadata_gateway=None):
        internal_vnic_index = None
        if newnexthop:
            internal_vnic_index = (
                edge_utils.get_internal_vnic_index_of_plr_tlr(
                    context, router_id))
        routes = []

        # If metadata service is configured, add a static route to direct
        # metadata requests to a DHCP Edge on one of the attached networks
        if metadata_gateway:
            routes.append({'destination': METADATA_CIDR,
                           'nexthop': metadata_gateway['ip_address'],
                           'network_id': metadata_gateway['network_id']})

        # Add extra routes referring to internal network on tlr
        extra_routes = self.plugin._prepare_edge_extra_routes(
            context, router_id)
        routes.extend([route for route in extra_routes
                       if not route.get('external')])
        edge_utils.update_routes(self.nsx_v, context,
                                 router_id, routes, newnexthop,
                                 gateway_vnic_index=internal_vnic_index)
 def _update_routes_on_tlr(
     self, context, router_id,
     newnexthop=vcns_const.INTEGRATION_EDGE_IPADDRESS):
     internal_vnic_index = None
     if newnexthop:
         internal_vnic_index = (
             edge_utils.get_internal_vnic_index_of_plr_tlr(
                 context, router_id))
     routes = []
     # Add extra routes referring to internal network on tlr
     extra_routes = self.plugin._prepare_edge_extra_routes(
         context, router_id)
     routes.extend([route for route in extra_routes
                    if not route.get('external')])
     edge_utils.update_routes(self.nsx_v, context,
                              router_id, routes, newnexthop,
                              gateway_vnic_index=internal_vnic_index)
예제 #3
0
 def _update_routes_on_routers(self, context, target_router_id, router_ids):
     nexthop = None
     all_routes = []
     for router_id in router_ids:
         routes = self.plugin._get_extra_routes_by_router_id(
             context, router_id)
         filters = {'device_id': [router_id]}
         ports = self.plugin.get_ports(context.elevated(), filters)
         self.plugin._add_network_info_for_routes(context, routes, ports)
         all_routes.extend(routes)
         if not nexthop:
             router_qry = context.session.query(l3_db.Router)
             router_db = router_qry.filter_by(id=router_id).one()
             router_nexthop = self.plugin._get_external_attachment_info(
                 context, router_db)[2]
             if router_nexthop:
                 nexthop = router_nexthop
     # TODO(berlin) do rollback op.
     edge_utils.update_routes(self.nsx_v, context, target_router_id,
                              all_routes, nexthop)
    def _update_routes_on_plr(self, context, router_id, plr_id, newnexthop):
        lswitch_id = edge_utils.get_internal_lswitch_id_of_plr_tlr(
            context, router_id)
        subnets = self.plugin._find_router_subnets_cidrs(
            context.elevated(), router_id)
        routes = []
        for subnet in subnets:
            routes.append({
                'destination': subnet,
                'nexthop': (vcns_const.INTEGRATION_LR_IPADDRESS.
                            split('/')[0]),
                'network_id': lswitch_id
            })

        # Add extra routes referring to external network on plr
        extra_routes = self.plugin._prepare_edge_extra_routes(
            context, router_id)
        routes.extend([route for route in extra_routes
                       if route.get('external')])
        edge_utils.update_routes(self.nsx_v, context,
                                 plr_id, routes, newnexthop)