Support preferred edge paths in Policy

Add GET and SET preferred edge paths in T1 API

Change-Id: Iaf3f7ec9ecee99d95df5297f9daff59e984336ee
This commit is contained in:
Enhao Cui 2021-03-12 14:22:00 -08:00
parent 4741b2edd8
commit 17eeeff0ea
3 changed files with 32 additions and 4 deletions

View File

@ -3186,16 +3186,19 @@ class TestPolicyTier1(NsxPolicyLibTestCase):
def test_set_edge_cluster(self): def test_set_edge_cluster(self):
tier1_id = '111' tier1_id = '111'
path = 'dummy/path' path = 'dummy/path'
preferred_edge_paths = ['dummy/path/edge/0', 'dummy/path/edge/1']
with mock.patch.object(self.policy_api, with mock.patch.object(self.policy_api,
"create_or_update") as api_call: "create_or_update") as api_call:
self.resourceApi.set_edge_cluster_path( self.resourceApi.set_edge_cluster_path(
tier1_id, path, tier1_id, path,
preferred_edge_paths=preferred_edge_paths,
tenant=TEST_TENANT) tenant=TEST_TENANT)
expected_def = core_defs.Tier1LocaleServiceDef( expected_def = core_defs.Tier1LocaleServiceDef(
tier1_id=tier1_id, tier1_id=tier1_id,
service_id=self.resourceApi._locale_service_id(tier1_id), service_id=self.resourceApi._locale_service_id(tier1_id),
edge_cluster_path=path, edge_cluster_path=path,
preferred_edge_paths=preferred_edge_paths,
tenant=TEST_TENANT) tenant=TEST_TENANT)
self.assert_called_with_def(api_call, expected_def) 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.assert_called_with_def(api_call, expected_def)
self.assertIsNotNone(result) 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): class TestPolicyTier1NoPassthrough(TestPolicyTier1):

View File

@ -516,6 +516,7 @@ class RouterLocaleServiceDef(ResourceDef):
def get_obj_dict(self): def get_obj_dict(self):
body = super(RouterLocaleServiceDef, self).get_obj_dict() body = super(RouterLocaleServiceDef, self).get_obj_dict()
self._set_attr_if_specified(body, 'edge_cluster_path') self._set_attr_if_specified(body, 'edge_cluster_path')
self._set_attr_if_specified(body, 'preferred_edge_paths')
return body return body

View File

@ -1248,13 +1248,23 @@ class NsxPolicyTier1Api(NsxPolicyResourceBase):
tenant=tenant) tenant=tenant)
self._delete_with_retry(t1service_def) 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, def set_edge_cluster_path(self, tier1_id, edge_cluster_path,
preferred_edge_paths=IGNORE,
tenant=constants.POLICY_INFRA_TENANT): tenant=constants.POLICY_INFRA_TENANT):
t1service_def = core_defs.Tier1LocaleServiceDef( kwargs = self._get_user_args(
tier1_id=tier1_id, tier1_id=tier1_id, service_id=self._locale_service_id(tier1_id),
service_id=self._locale_service_id(tier1_id),
edge_cluster_path=edge_cluster_path, 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) self._create_or_store(t1service_def)
def remove_edge_cluster(self, tier1_id, def remove_edge_cluster(self, tier1_id,