Merge "NSX|v+v3: Support default availability zones"

This commit is contained in:
Zuul 2017-11-26 08:55:53 +00:00 committed by Gerrit Code Review
commit 4504cbd9a1
3 changed files with 45 additions and 1 deletions

View File

@ -15,6 +15,8 @@
import abc import abc
from oslo_config import cfg
from neutron_lib.api.definitions import availability_zone as az_def from neutron_lib.api.definitions import availability_zone as az_def
from neutron_lib import exceptions as n_exc from neutron_lib import exceptions as n_exc
from neutron_lib.exceptions import availability_zone as az_exc from neutron_lib.exceptions import availability_zone as az_exc
@ -84,6 +86,25 @@ class ConfiguredAvailabilityZones(object):
obj = az_class(None) obj = az_class(None)
self.availability_zones[obj.name] = obj self.availability_zones[obj.name] = obj
# validate the default az:
if cfg.CONF.default_availability_zones:
# we support only 1 default az
if len(cfg.CONF.default_availability_zones) > 1:
raise nsx_exc.NsxInvalidConfiguration(
opt_name="default_availability_zones",
opt_value=cfg.CONF.default_availability_zones,
reason=_("The NSX plugin supports only 1 default AZ"))
default_az_name = cfg.CONF.default_availability_zones[0]
if (default_az_name not in self.availability_zones):
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"))
self._default_az = self.availability_zones[default_az_name]
else:
self._default_az = self.availability_zones[DEFAULT_NAME]
def get_availability_zone(self, name): def get_availability_zone(self, name):
"""Return an availability zone object by its name """Return an availability zone object by its name
""" """
@ -94,7 +115,7 @@ class ConfiguredAvailabilityZones(object):
def get_default_availability_zone(self): def get_default_availability_zone(self):
"""Return the default availability zone object """Return the default availability zone object
""" """
return self.availability_zones[DEFAULT_NAME] return self._default_az
def list_availability_zones(self): def list_availability_zones(self):
"""Return a list of availability zones names """Return a list of availability zones names

View File

@ -4258,6 +4258,8 @@ class NsxV3Plugin(agentschedulers_db.AZDhcpAgentSchedulerDbMixin,
# as the hint (or default if none) # as the hint (or default if none)
if net_res[az_def.AZ_HINTS]: if net_res[az_def.AZ_HINTS]:
az_name = net_res[az_def.AZ_HINTS][0] az_name = net_res[az_def.AZ_HINTS][0]
elif cfg.CONF.default_availability_zones:
az_name = cfg.CONF.default_availability_zones[0]
else: else:
az_name = nsx_az.DEFAULT_NAME az_name = nsx_az.DEFAULT_NAME
net_res[az_def.COLLECTION_NAME] = [az_name] net_res[az_def.COLLECTION_NAME] = [az_name]

View File

@ -3494,6 +3494,27 @@ class TestExclusiveRouterTestCase(L3NatTest, L3NatTestCaseBase,
self.assertEqual([az_name], self.assertEqual([az_name],
returned_router['availability_zones']) returned_router['availability_zones'])
def test_create_router_with_default_az(self):
az_name = 'az7'
set_az_in_config(az_name)
cfg.CONF.set_override('default_availability_zones', [az_name])
p = directory.get_plugin()
p._availability_zones_data = nsx_az.NsxVAvailabilityZones()
p._get_edge_id_by_rtr_id = p.real_get_edge
router = {'router': {'admin_state_up': True,
'name': 'e161be1d-0d0d-4046-9823-5a593d94f72c',
'tenant_id': 'fake_tenant',
'router_type': 'exclusive'}}
# router creation should succeed
returned_router = p.create_router(context.get_admin_context(),
router)
self.assertEqual([],
returned_router['availability_zone_hints'])
self.assertEqual([az_name],
returned_router['availability_zones'])
def test_floatingip_update_to_same_port_id_twice(self): def test_floatingip_update_to_same_port_id_twice(self):
self.skipTest('Plugin changes floating port status') self.skipTest('Plugin changes floating port status')