Merge "NSXv: DHCP reconfigure on VDR interface removal"
This commit is contained in:
commit
3dad033566
@ -398,6 +398,8 @@ class RouterDistributedDriver(router_driver.RouterBaseDriver):
|
|||||||
router_db = self.plugin._get_router(context, router_id)
|
router_db = self.plugin._get_router(context, router_id)
|
||||||
subnet = self.plugin.get_subnet(context, info['subnet_id'])
|
subnet = self.plugin.get_subnet(context, info['subnet_id'])
|
||||||
network_id = subnet['network_id']
|
network_id = subnet['network_id']
|
||||||
|
vdr_dhcp_binding = nsxv_db.get_vdr_dhcp_binding_by_vdr(
|
||||||
|
context.session, router_id)
|
||||||
|
|
||||||
with locking.LockManager.get_lock(self._get_edge_id(context,
|
with locking.LockManager.get_lock(self._get_edge_id(context,
|
||||||
router_id)):
|
router_id)):
|
||||||
@ -413,11 +415,6 @@ class RouterDistributedDriver(router_driver.RouterBaseDriver):
|
|||||||
context, router_db)[2]
|
context, router_db)[2]
|
||||||
md_gw_data = self._get_metadata_gw_data(context, router_id)
|
md_gw_data = self._get_metadata_gw_data(context, router_id)
|
||||||
self._update_routes(context, router_id, nexthop, md_gw_data)
|
self._update_routes(context, router_id, nexthop, md_gw_data)
|
||||||
if (subnet['enable_dhcp']
|
|
||||||
and self.plugin.metadata_proxy_handler
|
|
||||||
and not md_gw_data):
|
|
||||||
# No more DHCP interfaces on VDR. Remove DHCP binding
|
|
||||||
nsxv_db.delete_vdr_dhcp_binding(context.session, router_id)
|
|
||||||
|
|
||||||
# If DHCP is disabled, this remove cannot trigger metadata change
|
# If DHCP is disabled, this remove cannot trigger metadata change
|
||||||
# as metadata is served via DHCP Edge
|
# as metadata is served via DHCP Edge
|
||||||
@ -434,15 +431,15 @@ class RouterDistributedDriver(router_driver.RouterBaseDriver):
|
|||||||
edge_utils.delete_interface(
|
edge_utils.delete_interface(
|
||||||
self.nsx_v, context, router_id, network_id, dist=True)
|
self.nsx_v, context, router_id, network_id, dist=True)
|
||||||
|
|
||||||
# The network would be the last one attached to the VDR if
|
if self.plugin.metadata_proxy_handler and subnet['enable_dhcp']:
|
||||||
# md_gw_data is None. For such condition, we just keep network
|
self._attach_network_to_regular_dhcp(
|
||||||
# attached to the dhcp edge since the dhcp edge is a pure dhcp
|
context, router_id, network_id, subnet, vdr_dhcp_binding)
|
||||||
# support edge now
|
|
||||||
if (self.plugin.metadata_proxy_handler and subnet['enable_dhcp']
|
return info
|
||||||
and md_gw_data):
|
|
||||||
|
def _attach_network_to_regular_dhcp(
|
||||||
|
self, context, router_id, network_id, subnet, vdr_dhcp_binding):
|
||||||
# Detach network from VDR-dedicated DHCP Edge
|
# Detach network from VDR-dedicated DHCP Edge
|
||||||
vdr_dhcp_binding = nsxv_db.get_vdr_dhcp_binding_by_vdr(
|
|
||||||
context.session, router_id)
|
|
||||||
|
|
||||||
# A case where we do not have a vdr_dhcp_binding indicates a DB
|
# A case where we do not have a vdr_dhcp_binding indicates a DB
|
||||||
# inconsistency. We check for this anyway, in case that
|
# inconsistency. We check for this anyway, in case that
|
||||||
@ -461,9 +458,8 @@ class RouterDistributedDriver(router_driver.RouterBaseDriver):
|
|||||||
dhcp_id = self.edge_manager.create_dhcp_edge_service(
|
dhcp_id = self.edge_manager.create_dhcp_edge_service(
|
||||||
context, network_id, subnet)
|
context, network_id, subnet)
|
||||||
|
|
||||||
address_groups = (
|
address_groups = self.plugin._create_network_dhcp_address_group(
|
||||||
self.plugin._create_network_dhcp_address_group(context,
|
context, network_id)
|
||||||
network_id))
|
|
||||||
self.edge_manager.update_dhcp_edge_service(
|
self.edge_manager.update_dhcp_edge_service(
|
||||||
context, network_id, address_groups=address_groups)
|
context, network_id, address_groups=address_groups)
|
||||||
if dhcp_id:
|
if dhcp_id:
|
||||||
@ -476,8 +472,6 @@ class RouterDistributedDriver(router_driver.RouterBaseDriver):
|
|||||||
if md_proxy_handler:
|
if md_proxy_handler:
|
||||||
md_proxy_handler.configure_router_edge(dhcp_id)
|
md_proxy_handler.configure_router_edge(dhcp_id)
|
||||||
|
|
||||||
return info
|
|
||||||
|
|
||||||
def _update_edge_router(self, context, router_id):
|
def _update_edge_router(self, context, router_id):
|
||||||
router = self.plugin._get_router(context.elevated(), router_id)
|
router = self.plugin._get_router(context.elevated(), router_id)
|
||||||
plr_id = self.edge_manager.get_plr_by_tlr_id(context, router_id)
|
plr_id = self.edge_manager.get_plr_by_tlr_id(context, router_id)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user