From cd5e0823c90b6e7b5525119f30645ec8aebcfd77 Mon Sep 17 00:00:00 2001 From: Adit Sarfaty Date: Mon, 26 Sep 2016 11:31:55 +0300 Subject: [PATCH] NSX|v: Fix shared router clear gateway When a shared router is the only router on an edge, and the gateway is cleared, we should remove the static routes and default gateway before removing the interface, or else the backend will fail because the default gateway is illegal. Change-Id: I7d1ff6e30d3e51f84d76292b76e550792c19315a --- .../nsx_v/drivers/shared_router_driver.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/vmware_nsx/plugins/nsx_v/drivers/shared_router_driver.py b/vmware_nsx/plugins/nsx_v/drivers/shared_router_driver.py index 68e7799502..6638658c2f 100644 --- a/vmware_nsx/plugins/nsx_v/drivers/shared_router_driver.py +++ b/vmware_nsx/plugins/nsx_v/drivers/shared_router_driver.py @@ -691,8 +691,18 @@ class RouterSharedDriver(router_driver.RouterBaseDriver): self._unbind_router_on_edge(context, router_id) is_migrated = True else: + updated_routes = False # Update external vnic if addr or mask is changed if orgaddr != newaddr or orgmask != newmask: + # If external gateway is removed, the default + # gateway should be cleared before updating the + # interface, or else the backend will fail. + if (new_ext_net_id != org_ext_net_id and + new_ext_net_id is None): + self._update_routes_on_routers( + context, router_id, router_ids) + updated_routes = True + self._update_external_interface_on_routers( context, router_id, router_ids) @@ -711,9 +721,10 @@ class RouterSharedDriver(router_driver.RouterBaseDriver): context, router_id, router_ids, allow_external=True) - # Update static routes in all. - self._update_routes_on_routers( - context, router_id, router_ids) + # Update static routes in all (if not updated yet). + if not updated_routes: + self._update_routes_on_routers( + context, router_id, router_ids) if is_migrated: self._bind_router_on_available_edge( context, router_id, router.admin_state_up)