def routes_updated(self, ri): new_routes = ri.router['routes'] old_routes = ri.routes adds, removes = common_utils.diff_list_of_dict(old_routes, new_routes) for route in adds: LOG.debug(_("Added route entry is '%s'"), route) # remove replaced route from deleted route for del_route in removes: if route['destination'] == del_route['destination']: removes.remove(del_route) #replace success even if there is no existing route self._update_routing_table(ri, 'replace', route) for route in removes: LOG.debug(_("Removed route entry is '%s'"), route) self._update_routing_table(ri, 'delete', route) ri.routes = new_routes
def _update_extra_routes(self, context, router, routes): self._validate_routes(context, router["id"], routes) old_routes = self._get_extra_routes_by_router_id(context, router["id"]) added, removed = utils.diff_list_of_dict(old_routes, routes) LOG.debug("Added routes are %s" % added) for route in added: router_routes = RouterRoute( router_id=router["id"], destination=route["destination"], nexthop=route["nexthop"] ) context.session.add(router_routes) LOG.debug("Removed routes are %s" % removed) for route in removed: del_context = context.session.query(RouterRoute) del_context.filter_by( router_id=router["id"], destination=route["destination"], nexthop=route["nexthop"] ).delete()
def _update_extra_routes(self, context, router, routes): self._validate_routes(context, router['id'], routes) old_routes = self._get_extra_routes_by_router_id(context, router['id']) added, removed = utils.diff_list_of_dict(old_routes, routes) LOG.debug('Added routes are %s' % added) for route in added: router_routes = RouterRoute(router_id=router['id'], destination=route['destination'], nexthop=route['nexthop']) context.session.add(router_routes) LOG.debug('Removed routes are %s' % removed) for route in removed: del_context = context.session.query(RouterRoute) del_context.filter_by(router_id=router['id'], destination=route['destination'], nexthop=route['nexthop']).delete()