From 54bb41db957de9ce5f1cd3459c2250f885e8a67e Mon Sep 17 00:00:00 2001 From: Erica Liu Date: Fri, 31 Aug 2018 13:48:59 -0700 Subject: [PATCH] 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 --- vmware_nsxlib/tests/unit/v3/test_resources.py | 40 +++++++++++++++++++ vmware_nsxlib/v3/core_resources.py | 14 +++++++ vmware_nsxlib/v3/nsx_constants.py | 1 + 3 files changed, 55 insertions(+) diff --git a/vmware_nsxlib/tests/unit/v3/test_resources.py b/vmware_nsxlib/tests/unit/v3/test_resources.py index 1fc7a960..c70f066f 100644 --- a/vmware_nsxlib/tests/unit/v3/test_resources.py +++ b/vmware_nsxlib/tests/unit/v3/test_resources.py @@ -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): diff --git a/vmware_nsxlib/v3/core_resources.py b/vmware_nsxlib/v3/core_resources.py index 2b3c762f..353fed9a 100644 --- a/vmware_nsxlib/v3/core_resources.py +++ b/vmware_nsxlib/v3/core_resources.py @@ -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 diff --git a/vmware_nsxlib/v3/nsx_constants.py b/vmware_nsxlib/v3/nsx_constants.py index bba94bb2..04c14fbb 100644 --- a/vmware_nsxlib/v3/nsx_constants.py +++ b/vmware_nsxlib/v3/nsx_constants.py @@ -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"