From dd76e05bf3e72a722f94af88483b3fdc05429dc9 Mon Sep 17 00:00:00 2001 From: Rongrong_Miao Date: Sun, 4 Apr 2021 22:49:14 -0700 Subject: [PATCH] Fixes get_realization_info, added API to get router port Currently in get_realizaiton_info in Tier1 API, the entity_type is ignored. This patch fixes this issue to use entity_type to filter for realized entity returned by this API Also to easily get router port, an API is added for Tier1 API to return a list of RouterPort realized associated with the tier1 Issue: # Jira: # Signed-off-by: Rongrong_Miao Change-Id: Ife3f3652255db4ffc72872e4aef84418bf1a3211 (cherry picked from commit a953b1df2f13d718f7c0e37a3903c1daf2d03e0b) --- .../tests/unit/v3/policy/test_resources.py | 28 +++++++++++++++++++ vmware_nsxlib/v3/policy/core_resources.py | 25 ++++++++++++++--- 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/vmware_nsxlib/tests/unit/v3/policy/test_resources.py b/vmware_nsxlib/tests/unit/v3/policy/test_resources.py index 43e7dc5a..58d456da 100644 --- a/vmware_nsxlib/tests/unit/v3/policy/test_resources.py +++ b/vmware_nsxlib/tests/unit/v3/policy/test_resources.py @@ -3145,6 +3145,34 @@ class TestPolicyTier1(NsxPolicyLibTestCase): tier1_id, segment_id) self.assertEqual(lrp_id, actual_id) + def test_get_realization_info(self): + tier1_id = 'id-rtr' + with mock.patch.object(self.resourceApi, "_get_realization_info") as\ + mock_call: + self.resourceApi.get_realization_info( + tier1_id, entity_type='RealizedLogicalRouterPort', tenant=None) + expected_def = core_defs.Tier1Def(tier1_id=tier1_id, tenant=None) + self.assert_called_with_def_and_kwargs( + mock_call, + expected_def, + entity_type='RealizedLogicalRouterPort', + silent=False) + + def test_get_realized_router_port(self): + tier1_id = 'id-rtr' + with mock.patch.object(self.resourceApi, "_get_realization_info") as \ + mock_call: + self.resourceApi.get_realized_router_port( + tier1_id, tenant=None) + expected_def = core_defs.Tier1Def(tier1_id=tier1_id, tenant=None) + self.assert_called_with_def_and_kwargs( + mock_call, + expected_def, + entity_type='RealizedLogicalRouterPort', + all_result=True, + silent=False + ) + def test_set_dhcp_relay(self): tier1_id = '111' segment_id = '222' diff --git a/vmware_nsxlib/v3/policy/core_resources.py b/vmware_nsxlib/v3/policy/core_resources.py index 37f44672..ec8c0f6a 100644 --- a/vmware_nsxlib/v3/policy/core_resources.py +++ b/vmware_nsxlib/v3/policy/core_resources.py @@ -191,8 +191,9 @@ class NsxPolicyResourceBase(object, metaclass=abc.ABCMeta): return obj def _get_realization_info(self, resource_def, entity_type=None, - silent=False): + silent=False, all_results=False): entities = [] + results = [] try: path = resource_def.get_resource_full_path() entities = self.policy_api.get_realized_entities( @@ -202,11 +203,18 @@ class NsxPolicyResourceBase(object, metaclass=abc.ABCMeta): # look for the entry with the right entity_type for entity in entities: if entity.get('entity_type') == entity_type: - return entity + if all_results: + results.append(entity) + else: + return entity + return results else: # return the first realization entry # (Useful for resources with single realization entity) - return entities[0] + if not all_results: + return entities[0] + else: + return entities except exceptions.ResourceNotFound: pass @@ -1397,7 +1405,16 @@ class NsxPolicyTier1Api(NsxPolicyResourceBase): silent=False, tenant=constants.POLICY_INFRA_TENANT): tier1_def = self.entry_def(tier1_id=tier1_id, tenant=tenant) - return self._get_realization_info(tier1_def, silent=silent) + return self._get_realization_info(tier1_def, silent=silent, + entity_type=entity_type) + + def get_realized_router_port(self, tier1_id, silent=False, + tenant=constants.POLICY_INFRA_TENANT): + tier1_def = self.entry_def(tier1_id=tier1_id, tenant=tenant) + ports = self._get_realization_info( + tier1_def, entity_type='RealizedLogicalRouterPort', + all_result=True, silent=silent) + return ports def wait_until_realized(self, tier1_id, entity_type=None, tenant=constants.POLICY_INFRA_TENANT,