Add support to get overaly_tz id from Tier0 router

This patch add functions to retrieve overlay_tz id
from debug-info of T0 router. To be noted, a T0 router
will and will only has one DR associated with.
In the DR configuration, 'transportId' is either an
one-element list or a NoneType variable.

Change-Id: I1f1f58fbf1a9bd2dcddf75986a8a23621ebd06b1
This commit is contained in:
Erica Liu 2018-08-31 13:48:59 -07:00
parent 9bc88978fd
commit 54bb41db95
3 changed files with 55 additions and 0 deletions

View File

@ -925,6 +925,46 @@ class LogicalRouterTestCase(BaseTestResource):
'advertisement/rules' % router_id),
headers=self.default_headers())
def test_get_debug_info(self):
router = self.get_mocked_resource()
router_id = test_constants.FAKE_ROUTER_UUID
router.get_debug_info(router_id)
test_client.assert_json_call(
'get', router,
('https://1.2.3.4/api/v1/logical-routers/%s/'
'debug-info?format=text' % router_id),
headers=self.default_headers())
def test_get_transportzone_id_empty(self):
# Tier0 router may fail to provide TZ id if it
# is not yet connected with any Tier1 router
router = self.get_mocked_resource()
router_id = test_constants.FAKE_ROUTER_UUID
faked_responds = {
'componentInfo': [{
'componentType': nsx_constants.ROUTER_TYPE_TIER0_DR,
'transportZoneId': None
}]
}
with mock.patch.object(router.client, 'get',
return_value=faked_responds):
res = router.get_transportzone_id(router_id)
self.assertIsNone(res)
def test_get_transportzone_id(self):
router = self.get_mocked_resource()
router_id = test_constants.FAKE_ROUTER_UUID
faked_responds = {
'componentInfo': [{
'componentType': nsx_constants.ROUTER_TYPE_TIER0_DR,
'transportZoneId': ['faked_id']
}]
}
with mock.patch.object(router.client, 'get',
return_value=faked_responds):
res = router.get_transportzone_id(router_id)
self.assertEqual('faked_id', res)
class LogicalRouterPortTestCase(BaseTestResource):

View File

@ -649,6 +649,20 @@ class NsxLibLogicalRouter(utils.NsxLibApiBase):
logical_router_id)
return self.client.get(resource)
def get_debug_info(self, logical_router_id):
resource = ('logical-routers/%s/debug-info?format=text' %
logical_router_id)
return self.client.get(resource)
def get_transportzone_id(self, logical_router_id):
res = self.get_debug_info(logical_router_id)
for item in res['componentInfo']:
if item['componentType'] == nsx_constants.ROUTER_TYPE_TIER0_DR:
if item['transportZoneId']:
return item['transportZoneId'][0]
LOG.warning('OverlayTransportZone is not yet available on'
' %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):
# TODO(salv-orlando): If possible do not manage edge clusters

View File

@ -39,6 +39,7 @@ BRIDGE_ENDPOINT = "BRIDGEENDPOINT"
# Router type
ROUTER_TYPE_TIER0 = "TIER0"
ROUTER_TYPE_TIER1 = "TIER1"
ROUTER_TYPE_TIER0_DR = "DISTRIBUTED_ROUTER_TIER0"
LROUTERPORT_UPLINK = "LogicalRouterUpLinkPort"
LROUTERPORT_DOWNLINK = "LogicalRouterDownLinkPort"