Merge "NSX|v+v3: Support default availability zones"
This commit is contained in:
commit
4504cbd9a1
@ -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
|
||||||
|
@ -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]
|
||||||
|
@ -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')
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user