From 8304b2a28ae23f098f4aebca3e719eeff6ca65e9 Mon Sep 17 00:00:00 2001 From: Adit Sarfaty Date: Wed, 16 Aug 2017 11:07:27 +0300 Subject: [PATCH] NSX|v: get internal net by az fix getting the internal network per availability zone has a fallback to the default az which should not always be used. This patch creates a version of this db api without a fallback and uses it when we shouldn't use the default az. Change-Id: I2ec37e431fa08c80c19c32a50ed4e5a71222b0c2 --- vmware_nsx/db/nsxv_db.py | 17 +++++++++++++---- vmware_nsx/plugins/nsx_v/md_proxy.py | 2 +- .../admin/plugins/nsxv/resources/metadata.py | 2 +- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/vmware_nsx/db/nsxv_db.py b/vmware_nsx/db/nsxv_db.py index 48f4d12b3c..05e4ec202e 100644 --- a/vmware_nsx/db/nsxv_db.py +++ b/vmware_nsx/db/nsxv_db.py @@ -34,6 +34,7 @@ from vmware_nsx.db import db as nsx_db from vmware_nsx.db import nsxv_models from vmware_nsx.extensions import dhcp_mtu as ext_dhcp_mtu from vmware_nsx.extensions import dns_search_domain as ext_dns_search_domain +from vmware_nsx.plugins.nsx_v import availability_zones as nsx_az from vmware_nsx.plugins.nsx_v.vshield.common import constants NsxvEdgeDhcpStaticBinding = nsxv_models.NsxvEdgeDhcpStaticBinding @@ -379,7 +380,8 @@ def create_nsxv_internal_network(session, network_purpose, 'az': availability_zone}) -def get_nsxv_internal_network(session, network_purpose, availability_zone): +def get_nsxv_internal_network(session, network_purpose, availability_zone, + default_fallback=True): with session.begin(subtransactions=True): net_list = (session.query(nsxv_models.NsxvInternalNetworks). filter_by(network_purpose=network_purpose, @@ -387,16 +389,23 @@ def get_nsxv_internal_network(session, network_purpose, availability_zone): if net_list: # Should have only one results as purpose+az are the keys return net_list[0] - else: + elif default_fallback and availability_zone != nsx_az.DEFAULT_NAME: # try the default availability zone, since this zone does not - # have his own + # have his own internal edge net_list = (session.query(nsxv_models.NsxvInternalNetworks). filter_by(network_purpose=network_purpose, - availability_zone='default').all()) + availability_zone=nsx_az.DEFAULT_NAME).all()) if net_list: return net_list[0] +def get_nsxv_internal_network_for_az(session, network_purpose, + availability_zone): + return get_nsxv_internal_network(session, network_purpose, + availability_zone, + default_fallback=False) + + def get_nsxv_internal_networks(session, network_purpose): with session.begin(subtransactions=True): return (session.query(nsxv_models.NsxvInternalNetworks). diff --git a/vmware_nsx/plugins/nsx_v/md_proxy.py b/vmware_nsx/plugins/nsx_v/md_proxy.py index 6a23bbbe28..25aa44ce26 100644 --- a/vmware_nsx/plugins/nsx_v/md_proxy.py +++ b/vmware_nsx/plugins/nsx_v/md_proxy.py @@ -156,7 +156,7 @@ class NsxVMetadataProxyHandler(object): def _get_internal_net_by_az(self, context): # Get the internal network for the current az - int_net = nsxv_db.get_nsxv_internal_network( + int_net = nsxv_db.get_nsxv_internal_network_for_az( context.session, vcns_const.InternalEdgePurposes.INTER_EDGE_PURPOSE, self.az.name) diff --git a/vmware_nsx/shell/admin/plugins/nsxv/resources/metadata.py b/vmware_nsx/shell/admin/plugins/nsxv/resources/metadata.py index 45cbf65557..1d6727ffae 100644 --- a/vmware_nsx/shell/admin/plugins/nsxv/resources/metadata.py +++ b/vmware_nsx/shell/admin/plugins/nsxv/resources/metadata.py @@ -59,7 +59,7 @@ def nsx_redo_metadata_cfg_for_az(az, edgeapi): LOG.info("Updating MetaData for availability zone: %s", az.name) # Get the list of internal networks for this AZ - db_net = nsxv_db.get_nsxv_internal_network( + db_net = nsxv_db.get_nsxv_internal_network_for_az( edgeapi.context.session, vcns_constants.InternalEdgePurposes.INTER_EDGE_PURPOSE, az.name)