NSX|T: Support T1 LR HA relocation

The platform is adding resiliency on T1 using LR HA relocation
The goal is to have it enabled by default on Neutron created
routers and have a admin-util to enable on existing ones.

Change-Id: I3d9ec704d42a79f5f9f858d503416025e8664ad4
Signed-off-by: Michal Kelner Mishali <mkelnermishal@vmware.com>
This commit is contained in:
Michal Kelner Mishali 2018-12-30 10:30:57 +02:00
parent f0eb8a6262
commit 6579b18d68
4 changed files with 85 additions and 22 deletions

View File

@ -631,6 +631,43 @@ class LogicalRouterTestCase(BaseTestResource):
super(LogicalRouterTestCase, self).setUp(
core_resources.NsxLibLogicalRouter)
def test_create_logical_router_v1_1(self):
"""Test creating a router returns the correct response and 201 status.
"""
fake_router = test_constants.FAKE_ROUTER.copy()
router = self.get_mocked_resource()
tier0_router = True
description = 'dummy'
tz_id = 'tz_id'
allocation_pool = {
'allocation_pool_type': 'LoadBalancerAllocationPool',
'allocation_size': 'SMALL'
}
with mock.patch("vmware_nsxlib.v3.NsxLib.get_version",
return_value='1.1.0'):
router.create(fake_router['display_name'], None, None,
tier0_router,
description=description, transport_zone_id=tz_id,
allocation_pool=allocation_pool)
data = {
'display_name': fake_router['display_name'],
'router_type': 'TIER0' if tier0_router else 'TIER1',
'tags': None,
'description': description,
'advanced_config': {'transport_zone_id': tz_id},
'allocation_profile': {
'allocation_pool': allocation_pool
}
}
test_client.assert_json_call(
'post', router,
'https://1.2.3.4/api/v1/logical-routers',
data=jsonutils.dumps(data, sort_keys=True),
headers=self.default_headers())
def test_create_logical_router(self):
"""Test creating a router returns the correct response and 201 status.
@ -644,26 +681,32 @@ class LogicalRouterTestCase(BaseTestResource):
'allocation_pool_type': 'LoadBalancerAllocationPool',
'allocation_size': 'SMALL'
}
router.create(fake_router['display_name'], None, None, tier0_router,
description=description, transport_zone_id=tz_id,
allocation_pool=allocation_pool)
enable_standby_relocation = True
with mock.patch("vmware_nsxlib.v3.NsxLib.get_version",
return_value='2.4.0'):
router.create(fake_router['display_name'], None, None,
tier0_router,
description=description, transport_zone_id=tz_id,
allocation_pool=allocation_pool,
enable_standby_relocation=enable_standby_relocation)
data = {
'display_name': fake_router['display_name'],
'router_type': 'TIER0' if tier0_router else 'TIER1',
'tags': None,
'description': description,
'advanced_config': {'transport_zone_id': tz_id},
'allocation_profile': {
'allocation_pool': allocation_pool
data = {
'display_name': fake_router['display_name'],
'router_type': 'TIER0' if tier0_router else 'TIER1',
'tags': None,
'description': description,
'advanced_config': {'transport_zone_id': tz_id},
'allocation_profile': {
'allocation_pool': allocation_pool,
'enable_standby_relocation': enable_standby_relocation
}
}
}
test_client.assert_json_call(
'post', router,
'https://1.2.3.4/api/v1/logical-routers',
data=jsonutils.dumps(data, sort_keys=True),
headers=self.default_headers())
test_client.assert_json_call(
'post', router,
'https://1.2.3.4/api/v1/logical-routers',
data=jsonutils.dumps(data, sort_keys=True),
headers=self.default_headers())
def test_update_logical_router(self):
fake_router = test_constants.FAKE_ROUTER.copy()
@ -674,13 +717,15 @@ class LogicalRouterTestCase(BaseTestResource):
description = 'dummy'
edge_cluster_id = 'ec_id'
tz_id = 'tz_id'
enable_standby_relocation = True
with mock.patch.object(router.client, 'get',
return_value=fake_router),\
mock.patch("vmware_nsxlib.v3.NsxLib.get_version",
return_value='2.2.0'):
return_value='2.4.0'):
router.update(uuid, display_name=name, description=description,
edge_cluster_id=edge_cluster_id,
transport_zone_id=tz_id)
transport_zone_id=tz_id,
enable_standby_relocation=enable_standby_relocation)
fake_router["display_name"] = name
fake_router["description"] = description

View File

@ -146,6 +146,8 @@ class NsxLib(lib.NsxLibBase):
return True
if (feature == nsx_constants.FEATURE_ICMP_STRICT):
return True
if (feature == nsx_constants.FEATURE_ENABLE_STANDBY_RELOCATION):
return True
if (version.LooseVersion(self.get_version()) >=
version.LooseVersion(nsx_constants.NSX_VERSION_2_3_0)):

View File

@ -695,7 +695,8 @@ class NsxLibLogicalRouter(utils.NsxLibApiBase):
' %s.' % (logical_router_id))
def create(self, display_name, tags, edge_cluster_uuid=None, tier_0=False,
description=None, transport_zone_id=None, allocation_pool=None):
description=None, transport_zone_id=None,
allocation_pool=None, enable_standby_relocation=False):
# TODO(salv-orlando): If possible do not manage edge clusters
# in the main plugin logic.
router_type = (nsx_constants.ROUTER_TYPE_TIER0 if tier_0 else
@ -710,9 +711,17 @@ class NsxLibLogicalRouter(utils.NsxLibApiBase):
if transport_zone_id:
body['advanced_config'] = {
'transport_zone_id': transport_zone_id}
allocation_profile = {}
if allocation_pool:
body['allocation_profile'] = {
'allocation_pool': allocation_pool}
allocation_profile['allocation_pool'] = allocation_pool
if (enable_standby_relocation and self.nsxlib and
self.nsxlib.feature_supported(
nsx_constants.FEATURE_ENABLE_STANDBY_RELOCATION)):
allocation_profile[
'enable_standby_relocation'] = enable_standby_relocation
if allocation_profile:
body['allocation_profile'] = allocation_profile
return self.client.create(self.get_path(), body=body)
def delete(self, lrouter_id, force=False):
@ -728,6 +737,12 @@ class NsxLibLogicalRouter(utils.NsxLibApiBase):
if arg == 'transport_zone_id':
body['advanced_config'] = {
'transport_zone_id': kwargs['transport_zone_id']}
elif arg == 'enable_standby_relocation':
if (self.nsxlib and self.nsxlib.feature_supported(
nsx_constants.FEATURE_ENABLE_STANDBY_RELOCATION)):
body['allocation_profile'] = {
'enable_standby_relocation':
kwargs['enable_standby_relocation']}
else:
body[arg] = kwargs[arg]

View File

@ -158,6 +158,7 @@ FEATURE_NO_DNAT_NO_SNAT = 'No DNAT/No SNAT'
FEATURE_ENS_WITH_SEC = 'ENS with security'
FEATURE_ICMP_STRICT = 'Strict list of supported ICMP types and codes'
FEATURE_ROUTER_ALLOCATION_PROFILE = 'Router Allocation Profile'
FEATURE_ENABLE_STANDBY_RELOCATION = 'Router Enable standby relocation'
# Features available depending on the Policy Manager backend version
FEATURE_NSX_POLICY = 'NSX Policy'