TVD availability zones
1. Do not allow the same availability zone to be configured for both NSX-V and NSX-T 2. Adding separate configurations for the nsx-v/t default availability zones under the tvd configuration section: [nsx_tvd] nsx_v_default_availability_zones = zone2 nsx_v3_default_availability_zones = zone1 Change-Id: Ic77dae9398b8281b8ea4d2988447907d1ac55c90
This commit is contained in:
parent
b12e6a414b
commit
b0a02917ee
@ -36,9 +36,6 @@ NATIVE_DHCP_METADATA=${NATIVE_DHCP_METADATA:-True}
|
||||
NATIVE_METADATA_ROUTE=${NATIVE_METADATA_ROUTE:-169.254.169.254/31}
|
||||
METADATA_PROXY_SHARED_SECRET=${METADATA_PROXY_SHARED_SECRET:-}
|
||||
|
||||
# Default AZ
|
||||
NSX_DEFAULT_AZ=${NSX_DEFAULT_AZ:-defaultv3}
|
||||
|
||||
# Save trace setting
|
||||
NSX_XTRACE=$(set +o | grep xtrace)
|
||||
set +o xtrace
|
||||
|
@ -15,8 +15,6 @@
|
||||
|
||||
import abc
|
||||
|
||||
from oslo_config import cfg
|
||||
|
||||
from neutron_lib.api.definitions import availability_zone as az_def
|
||||
from neutron_lib import exceptions as n_exc
|
||||
from neutron_lib.exceptions import availability_zone as az_exc
|
||||
@ -78,7 +76,7 @@ class ConfiguredAvailabilityZones(object):
|
||||
|
||||
default_name = DEFAULT_NAME
|
||||
|
||||
def __init__(self, az_conf, az_class, validate_default=True):
|
||||
def __init__(self, az_conf, az_class, default_availability_zones=None):
|
||||
self.availability_zones = {}
|
||||
|
||||
# Add the configured availability zones
|
||||
@ -91,24 +89,20 @@ class ConfiguredAvailabilityZones(object):
|
||||
self.availability_zones[obj.name] = obj
|
||||
|
||||
# validate the default az:
|
||||
if cfg.CONF.default_availability_zones:
|
||||
if default_availability_zones:
|
||||
# we support only 1 default az
|
||||
if len(cfg.CONF.default_availability_zones) > 1:
|
||||
if len(default_availability_zones) > 1:
|
||||
raise nsx_exc.NsxInvalidConfiguration(
|
||||
opt_name="default_availability_zones",
|
||||
opt_value=cfg.CONF.default_availability_zones,
|
||||
opt_value=default_availability_zones,
|
||||
reason=_("The NSX plugin supports only 1 default AZ"))
|
||||
default_az_name = cfg.CONF.default_availability_zones[0]
|
||||
default_az_name = default_availability_zones[0]
|
||||
if (default_az_name not in self.availability_zones):
|
||||
if validate_default:
|
||||
raise nsx_exc.NsxInvalidConfiguration(
|
||||
opt_name="default_availability_zones",
|
||||
opt_value=cfg.CONF.default_availability_zones,
|
||||
reason=_("The default AZ is not defined in the NSX "
|
||||
"plugin"))
|
||||
else:
|
||||
self._default_az = self.availability_zones[
|
||||
self.default_name]
|
||||
raise nsx_exc.NsxInvalidConfiguration(
|
||||
opt_name="default_availability_zones",
|
||||
opt_value=default_availability_zones,
|
||||
reason=_("The default AZ is not defined in the NSX "
|
||||
"plugin"))
|
||||
else:
|
||||
self._default_az = self.availability_zones[default_az_name]
|
||||
else:
|
||||
|
@ -845,6 +845,16 @@ nsx_tvd_opts = [
|
||||
choices=projectpluginmap.VALID_TYPES,
|
||||
help=_("The default plugin that will be used for new projects "
|
||||
"that were not added to the projects plugin mapping.")),
|
||||
cfg.ListOpt('nsx_v_default_availability_zones',
|
||||
default=[],
|
||||
help=_("The default availability zones that will be used for "
|
||||
"NSX-V networks and routers creation under the TVD "
|
||||
"plugin.")),
|
||||
cfg.ListOpt('nsx_v3_default_availability_zones',
|
||||
default=[],
|
||||
help=_("The default availability zones that will be used for "
|
||||
"NSX-V3 networks and routers creation under the TVD "
|
||||
"plugin.")),
|
||||
]
|
||||
|
||||
# Register the configuration options
|
||||
|
@ -162,6 +162,9 @@ class NsxTVDPlugin(agentschedulers_db.AZDhcpAgentSchedulerDbMixin,
|
||||
LOG.info("NSX-TVD plugin will use %s as the default plugin",
|
||||
self.default_plugin)
|
||||
|
||||
# validate the availability zones configuration
|
||||
self.init_availability_zones()
|
||||
|
||||
def get_plugin_by_type(self, plugin_type):
|
||||
return self.plugins.get(plugin_type)
|
||||
|
||||
@ -192,6 +195,15 @@ class NsxTVDPlugin(agentschedulers_db.AZDhcpAgentSchedulerDbMixin,
|
||||
self._unsupported_fields[plugin_type]['port'] = [
|
||||
'mac_learning_enabled', 'provider_security_groups']
|
||||
|
||||
def init_availability_zones(self):
|
||||
# Make sure there are no overlaps between v/t availability zones
|
||||
if (self.plugins.get(projectpluginmap.NsxPlugins.NSX_V) and
|
||||
self.plugins.get(projectpluginmap.NsxPlugins.NSX_T) and
|
||||
bool(set(cfg.CONF.nsxv.availability_zones) &
|
||||
set(cfg.CONF.nsx_v3.availability_zones))):
|
||||
msg = _("Cannot use the same availability zones in NSX-V and T")
|
||||
raise nsx_exc.NsxPluginException(err_msg=msg)
|
||||
|
||||
def _unsubscribe_callback_events(self):
|
||||
# unsubscribe the callback that should be called on all plugins
|
||||
# other that NSX-T.
|
||||
|
@ -204,11 +204,15 @@ class NsxVAvailabilityZone(common_az.ConfiguredAvailabilityZone):
|
||||
|
||||
class NsxVAvailabilityZones(common_az.ConfiguredAvailabilityZones):
|
||||
|
||||
def __init__(self, validate_default=False):
|
||||
def __init__(self, use_tvd_config=False):
|
||||
if use_tvd_config:
|
||||
default_azs = cfg.CONF.nsx_tvd.nsx_v_default_availability_zones
|
||||
else:
|
||||
default_azs = cfg.CONF.default_availability_zones
|
||||
super(NsxVAvailabilityZones, self).__init__(
|
||||
cfg.CONF.nsxv.availability_zones,
|
||||
NsxVAvailabilityZone,
|
||||
validate_default=validate_default)
|
||||
default_availability_zones=default_azs)
|
||||
|
||||
def get_inventory(self):
|
||||
"""Return a set of relevant resources in all the availability zones
|
||||
|
@ -1023,9 +1023,8 @@ class NsxVPluginV2(addr_pair_db.AllowedAddressPairsMixin,
|
||||
return '%s.%03d' % (device_id, port_index)
|
||||
|
||||
def init_availability_zones(self):
|
||||
validate_default = not self._is_sub_plugin
|
||||
self._availability_zones_data = nsx_az.NsxVAvailabilityZones(
|
||||
validate_default=validate_default)
|
||||
use_tvd_config=self._is_sub_plugin)
|
||||
|
||||
def _list_availability_zones(self, context, filters=None):
|
||||
#TODO(asarfaty): We may need to use the filters arg, but now it
|
||||
|
@ -210,11 +210,15 @@ class NsxV3AvailabilityZones(common_az.ConfiguredAvailabilityZones):
|
||||
|
||||
default_name = DEFAULT_NAME
|
||||
|
||||
def __init__(self, validate_default=False):
|
||||
def __init__(self, use_tvd_config=False):
|
||||
if use_tvd_config:
|
||||
default_azs = cfg.CONF.nsx_tvd.nsx_v3_default_availability_zones
|
||||
else:
|
||||
default_azs = cfg.CONF.default_availability_zones
|
||||
super(NsxV3AvailabilityZones, self).__init__(
|
||||
cfg.CONF.nsx_v3.availability_zones,
|
||||
NsxV3AvailabilityZone,
|
||||
validate_default=validate_default)
|
||||
default_availability_zones=default_azs)
|
||||
|
||||
def dhcp_relay_configured(self):
|
||||
for az in self.availability_zones.values():
|
||||
|
@ -375,9 +375,8 @@ class NsxV3Plugin(agentschedulers_db.AZDhcpAgentSchedulerDbMixin,
|
||||
return lb_driver_v2.DummyLoadbalancerDriverV2()
|
||||
|
||||
def init_availability_zones(self):
|
||||
validate_default = not self._is_sub_plugin
|
||||
self._availability_zones_data = nsx_az.NsxV3AvailabilityZones(
|
||||
validate_default=validate_default)
|
||||
use_tvd_config=self._is_sub_plugin)
|
||||
|
||||
def _init_nsx_profiles(self):
|
||||
LOG.debug("Initializing NSX v3 port spoofguard switching profile")
|
||||
@ -4411,10 +4410,8 @@ class NsxV3Plugin(agentschedulers_db.AZDhcpAgentSchedulerDbMixin,
|
||||
# as the hint (or default if none)
|
||||
if hints:
|
||||
az_name = hints[0]
|
||||
elif cfg.CONF.default_availability_zones:
|
||||
az_name = cfg.CONF.default_availability_zones[0]
|
||||
else:
|
||||
az_name = nsx_az.DEFAULT_NAME
|
||||
az_name = self.get_default_az().name
|
||||
return [az_name]
|
||||
else:
|
||||
return []
|
||||
|
@ -44,6 +44,14 @@ class NsxTVDPluginTestCase(v_tests.NsxVPluginV2TestCase,
|
||||
cfg.CONF.set_override('default_plugin', self.plugin_type,
|
||||
group="nsx_tvd")
|
||||
|
||||
# set the default availability zones
|
||||
cfg.CONF.set_override('nsx_v_default_availability_zones',
|
||||
['default'],
|
||||
group="nsx_tvd")
|
||||
cfg.CONF.set_override('nsx_v3_default_availability_zones',
|
||||
['defaultv3'],
|
||||
group="nsx_tvd")
|
||||
|
||||
super(NsxTVDPluginTestCase, self).setUp(
|
||||
plugin=plugin,
|
||||
ext_mgr=ext_mgr)
|
||||
|
Loading…
Reference in New Issue
Block a user