From 238308fa014352d8f97e64eef6bce439e584a6e9 Mon Sep 17 00:00:00 2001 From: Enhao Cui Date: Fri, 12 Mar 2021 14:22:00 -0800 Subject: [PATCH] Support preferred edge paths in Policy Add GET and SET preferred edge paths in T1 API Change-Id: Iaf3f7ec9ecee99d95df5297f9daff59e984336ee (cherry picked from commit 17eeeff0eaf8cb26d96b1b3269e51edc42a7ffb5) --- .../tests/unit/v3/policy/test_resources.py | 17 +++++++++++++++++ vmware_nsxlib/v3/policy/core_defs.py | 1 + vmware_nsxlib/v3/policy/core_resources.py | 18 ++++++++++++++---- 3 files changed, 32 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 9b47576a..677d66c9 100644 --- a/vmware_nsxlib/tests/unit/v3/policy/test_resources.py +++ b/vmware_nsxlib/tests/unit/v3/policy/test_resources.py @@ -3186,16 +3186,19 @@ class TestPolicyTier1(NsxPolicyLibTestCase): def test_set_edge_cluster(self): tier1_id = '111' path = 'dummy/path' + preferred_edge_paths = ['dummy/path/edge/0', 'dummy/path/edge/1'] with mock.patch.object(self.policy_api, "create_or_update") as api_call: self.resourceApi.set_edge_cluster_path( tier1_id, path, + preferred_edge_paths=preferred_edge_paths, tenant=TEST_TENANT) expected_def = core_defs.Tier1LocaleServiceDef( tier1_id=tier1_id, service_id=self.resourceApi._locale_service_id(tier1_id), edge_cluster_path=path, + preferred_edge_paths=preferred_edge_paths, tenant=TEST_TENANT) self.assert_called_with_def(api_call, expected_def) @@ -3542,6 +3545,20 @@ class TestPolicyTier1(NsxPolicyLibTestCase): self.assert_called_with_def(api_call, expected_def) self.assertIsNotNone(result) + def test_get_preferred_edge_paths(self): + tier1_id = "1111" + preferred_edge_paths = [ + "/fake/edge-clusters/edge-nodes/0", + "/fake/edge-clusters/edge-nodes/0" + ] + with mock.patch.object( + self.resourceApi, "get_locale_tier1_services", + return_value=[{"preferred_edge_paths": preferred_edge_paths}]): + result = self.resourceApi.get_preferred_edge_paths(tier1_id) + self.assertEqual( + preferred_edge_paths, + result) + class TestPolicyTier1NoPassthrough(TestPolicyTier1): diff --git a/vmware_nsxlib/v3/policy/core_defs.py b/vmware_nsxlib/v3/policy/core_defs.py index daa70aee..505ec331 100644 --- a/vmware_nsxlib/v3/policy/core_defs.py +++ b/vmware_nsxlib/v3/policy/core_defs.py @@ -516,6 +516,7 @@ class RouterLocaleServiceDef(ResourceDef): def get_obj_dict(self): body = super(RouterLocaleServiceDef, self).get_obj_dict() self._set_attr_if_specified(body, 'edge_cluster_path') + self._set_attr_if_specified(body, 'preferred_edge_paths') return body diff --git a/vmware_nsxlib/v3/policy/core_resources.py b/vmware_nsxlib/v3/policy/core_resources.py index f68433e0..c95e144b 100644 --- a/vmware_nsxlib/v3/policy/core_resources.py +++ b/vmware_nsxlib/v3/policy/core_resources.py @@ -1248,13 +1248,23 @@ class NsxPolicyTier1Api(NsxPolicyResourceBase): tenant=tenant) self._delete_with_retry(t1service_def) + def get_preferred_edge_paths(self, tier1_id, + tenant=constants.POLICY_INFRA_TENANT): + services = self.get_locale_tier1_services(tier1_id, tenant=tenant) + for srv in services: + if 'preferred_edge_paths' in srv: + return srv['preferred_edge_paths'] + def set_edge_cluster_path(self, tier1_id, edge_cluster_path, + preferred_edge_paths=IGNORE, tenant=constants.POLICY_INFRA_TENANT): - t1service_def = core_defs.Tier1LocaleServiceDef( - tier1_id=tier1_id, - service_id=self._locale_service_id(tier1_id), + kwargs = self._get_user_args( + tier1_id=tier1_id, service_id=self._locale_service_id(tier1_id), edge_cluster_path=edge_cluster_path, - tenant=tenant) + preferred_edge_paths=preferred_edge_paths, + tenant=tenant + ) + t1service_def = core_defs.Tier1LocaleServiceDef(**kwargs) self._create_or_store(t1service_def) def remove_edge_cluster(self, tier1_id,