Add generic session persistence api

Some actions are common to all types of session persistence profiles,
so this patch adds a generic resource for those actions.
In addition the list action should return only resources of the
requested type.

Change-Id: I803bb4ad9ed031c44b06d7eb99f00fa5491d3869
This commit is contained in:
Adit Sarfaty
2019-06-05 10:25:22 +03:00
parent 4a5b1f270a
commit 52acc8b4ae
3 changed files with 148 additions and 58 deletions

View File

@@ -124,6 +124,59 @@ class TestPolicyLBClientSSLProfileApi(test_resources.NsxPolicyLibTestCase):
self.assert_called_with_def(update_call, expected_def) self.assert_called_with_def(update_call, expected_def)
class TestPolicyLBPersistenceProfile(
test_resources.NsxPolicyLibTestCase):
def setUp(self, *args, **kwargs):
super(TestPolicyLBPersistenceProfile, self).setUp()
self.resourceApi = (
self.policy_lib.load_balancer.lb_persistence_profile)
def test_delete(self):
obj_id = '111'
with mock.patch.object(self.policy_api, "delete") as api_call:
self.resourceApi.delete(obj_id, tenant=TEST_TENANT)
expected_def = (
self.resourceApi.entry_def(
persistence_profile_id=obj_id,
tenant=TEST_TENANT))
self.assert_called_with_def(api_call, expected_def)
def test_get(self):
obj_id = '111'
with mock.patch.object(self.policy_api, "get",
return_value={'id': obj_id}) as api_call:
result = self.resourceApi.get(obj_id, tenant=TEST_TENANT)
expected_def = (
self.resourceApi.entry_def(
persistence_profile_id=obj_id,
tenant=TEST_TENANT))
self.assert_called_with_def(api_call, expected_def)
self.assertEqual(obj_id, result['id'])
def test_get_by_name(self):
name = 'd1'
with mock.patch.object(
self.policy_api, "list",
return_value={'results': [{'display_name': name}]}) as api_call:
obj = self.resourceApi.get_by_name(name, tenant=TEST_TENANT)
self.assertIsNotNone(obj)
expected_def = (
self.resourceApi.entry_def(
tenant=TEST_TENANT))
self.assert_called_with_def(api_call, expected_def)
def test_list(self):
with mock.patch.object(self.policy_api, "list",
return_value={'results': []}) as api_call:
result = self.resourceApi.list(tenant=TEST_TENANT)
expected_def = (
self.resourceApi.entry_def(
tenant=TEST_TENANT))
self.assert_called_with_def(api_call, expected_def)
self.assertEqual([], result)
class TestPolicyLBCookiePersistenceProfile( class TestPolicyLBCookiePersistenceProfile(
test_resources.NsxPolicyLibTestCase): test_resources.NsxPolicyLibTestCase):
@@ -211,7 +264,9 @@ class TestPolicyLBCookiePersistenceProfile(
name = 'd1' name = 'd1'
with mock.patch.object( with mock.patch.object(
self.policy_api, "list", self.policy_api, "list",
return_value={'results': [{'display_name': name}]}) as api_call: return_value={'results': [
{'resource_type': self.resourceApi.entry_def.resource_type,
'display_name': name}]}) as api_call:
obj = self.resourceApi.get_by_name(name, tenant=TEST_TENANT) obj = self.resourceApi.get_by_name(name, tenant=TEST_TENANT)
self.assertIsNotNone(obj) self.assertIsNotNone(obj)
expected_def = ( expected_def = (
@@ -220,14 +275,19 @@ class TestPolicyLBCookiePersistenceProfile(
self.assert_called_with_def(api_call, expected_def) self.assert_called_with_def(api_call, expected_def)
def test_list(self): def test_list(self):
with mock.patch.object(self.policy_api, "list", with mock.patch.object(
return_value={'results': []}) as api_call: self.policy_api, "list",
return_value={'results': [
{'resource_type': self.resourceApi.entry_def.resource_type,
'display_name': 'profile1'},
{'resource_type': 'wrong_type',
'display_name': 'profile2'}]}) as api_call:
result = self.resourceApi.list(tenant=TEST_TENANT) result = self.resourceApi.list(tenant=TEST_TENANT)
expected_def = ( expected_def = (
lb_defs.LBCookiePersistenceProfileDef( lb_defs.LBCookiePersistenceProfileDef(
tenant=TEST_TENANT)) tenant=TEST_TENANT))
self.assert_called_with_def(api_call, expected_def) self.assert_called_with_def(api_call, expected_def)
self.assertEqual([], result) self.assertEqual(1, len(result))
def test_update(self): def test_update(self):
obj_id = '111' obj_id = '111'
@@ -348,7 +408,9 @@ class TestPolicyLBSourceIpProfileApi(test_resources.NsxPolicyLibTestCase):
name = 'd1' name = 'd1'
with mock.patch.object( with mock.patch.object(
self.policy_api, "list", self.policy_api, "list",
return_value={'results': [{'display_name': name}]}) as api_call: return_value={'results': [
{'resource_type': self.resourceApi.entry_def.resource_type,
'display_name': name}]}) as api_call:
obj = self.resourceApi.get_by_name(name, tenant=TEST_TENANT) obj = self.resourceApi.get_by_name(name, tenant=TEST_TENANT)
self.assertIsNotNone(obj) self.assertIsNotNone(obj)
expected_def = ( expected_def = (

View File

@@ -55,6 +55,10 @@ class ObjectAlreadyExists(NsxLibException):
message = _("%(object_type)s already exists") message = _("%(object_type)s already exists")
class NotImplemented(NsxLibException):
message = _("%(operation)s is not supported")
class ObjectNotGenerated(NsxLibException): class ObjectNotGenerated(NsxLibException):
message = _("%(object_type)s was not generated") message = _("%(object_type)s was not generated")

View File

@@ -154,7 +154,7 @@ class NsxPolicyLBAppProfileFastUdpApi(
return lb_defs.LBFastUdpProfile return lb_defs.LBFastUdpProfile
class NsxPolicyLoadBalancerLBClientSSLProfileApi(NsxPolicyResourceBase): class NsxPolicyLoadBalancerClientSSLProfileApi(NsxPolicyResourceBase):
"""NSX Policy LB client ssl profile""" """NSX Policy LB client ssl profile"""
@property @property
@@ -219,9 +219,67 @@ class NsxPolicyLoadBalancerLBClientSSLProfileApi(NsxPolicyResourceBase):
return profile_def.get_resource_full_path() return profile_def.get_resource_full_path()
class NsxPolicyLoadBalancerLBCookiePersistenceProfileApi( class NsxPolicyLoadBalancerPersistenceProfileApi(
NsxPolicyResourceBase): NsxPolicyResourceBase):
"""NSX Policy LB client ssl profile""" """LB generic api for all types of session persistence profiles"""
@property
def entry_def(self):
return lb_defs.LBPersistenceProfileBase
def create_or_overwrite(self, name,
persistence_profile_id=None,
description=IGNORE,
tags=IGNORE,
ha_persistence_mirroring_enabled=IGNORE,
persistence_shared=IGNORE,
purge=IGNORE,
timeout=IGNORE,
tenant=constants.POLICY_INFRA_TENANT):
raise nsxlib_exc.NotImplemented(
"Creating generic persistence profile")
def delete(self, persistence_profile_id,
tenant=constants.POLICY_INFRA_TENANT):
persistence_profile_def = self.entry_def(
persistence_profile_id=persistence_profile_id,
tenant=tenant)
self.policy_api.delete(persistence_profile_def)
def get(self, persistence_profile_id,
tenant=constants.POLICY_INFRA_TENANT):
persistence_profile_def = self.entry_def(
persistence_profile_id=persistence_profile_id,
tenant=tenant)
return self.policy_api.get(persistence_profile_def)
def list(self, tenant=constants.POLICY_INFRA_TENANT):
persistence_profile_def = self.entry_def(tenant=tenant)
return self._list(persistence_profile_def)
def update(self, persistence_profile_id,
name=IGNORE,
description=IGNORE,
tags=IGNORE,
ha_persistence_mirroring_enabled=IGNORE,
persistence_shared=IGNORE,
purge=IGNORE,
timeout=IGNORE,
tenant=constants.POLICY_INFRA_TENANT):
raise nsxlib_exc.NotImplemented(
"Updating generic persistence profile")
def get_path(self, profile_id,
tenant=constants.POLICY_INFRA_TENANT):
profile_def = self.entry_def(
persistence_profile_id=profile_id,
tenant=tenant)
return profile_def.get_resource_full_path()
class NsxPolicyLoadBalancerCookiePersistenceProfileApi(
NsxPolicyLoadBalancerPersistenceProfileApi):
"""NSX Policy LB cookie persistence profile"""
@property @property
def entry_def(self): def entry_def(self):
@@ -255,23 +313,12 @@ class NsxPolicyLoadBalancerLBCookiePersistenceProfileApi(
self._create_or_store(lb_cookie_persistence_profile_def) self._create_or_store(lb_cookie_persistence_profile_def)
return persistence_profile_id return persistence_profile_id
def delete(self, persistence_profile_id,
tenant=constants.POLICY_INFRA_TENANT):
lb_cookie_persistence_profile_def = self.entry_def(
persistence_profile_id=persistence_profile_id,
tenant=tenant)
self.policy_api.delete(lb_cookie_persistence_profile_def)
def get(self, persistence_profile_id,
tenant=constants.POLICY_INFRA_TENANT):
lb_cookie_persistence_profile_def = self.entry_def(
persistence_profile_id=persistence_profile_id,
tenant=tenant)
return self.policy_api.get(lb_cookie_persistence_profile_def)
def list(self, tenant=constants.POLICY_INFRA_TENANT): def list(self, tenant=constants.POLICY_INFRA_TENANT):
lb_cookie_persistence_profile_def = self.entry_def(tenant=tenant) lb_cookie_persistence_profile_def = self.entry_def(tenant=tenant)
return self._list(lb_cookie_persistence_profile_def) results = self._list(lb_cookie_persistence_profile_def)
# filter the results by resource type
return [res for res in results
if res.get('resource_type') == self.entry_def.resource_type]
def update(self, persistence_profile_id, def update(self, persistence_profile_id,
name=IGNORE, name=IGNORE,
@@ -297,17 +344,10 @@ class NsxPolicyLoadBalancerLBCookiePersistenceProfileApi(
persistence_shared=persistence_shared, persistence_shared=persistence_shared,
tenant=tenant) tenant=tenant)
def get_path(self, profile_id,
tenant=constants.POLICY_INFRA_TENANT):
profile_def = self.entry_def(
persistence_profile_id=profile_id,
tenant=tenant)
return profile_def.get_resource_full_path()
class NsxPolicyLoadBalancerSourceIpPersistenceProfileApi(
class NsxPolicyLoadBalancerLBSourceIpPersistenceProfileApi( NsxPolicyLoadBalancerPersistenceProfileApi):
NsxPolicyResourceBase): """NSX Policy LB source ip persistence profile"""
"""NSX Policy LB client ssl profile"""
@property @property
def entry_def(self): def entry_def(self):
@@ -337,23 +377,12 @@ class NsxPolicyLoadBalancerLBSourceIpPersistenceProfileApi(
self._create_or_store(lb_source_ip_persistence_profile_def) self._create_or_store(lb_source_ip_persistence_profile_def)
return persistence_profile_id return persistence_profile_id
def delete(self, persistence_profile_id,
tenant=constants.POLICY_INFRA_TENANT):
lb_source_ip_persistence_profile_def = self.entry_def(
persistence_profile_id=persistence_profile_id,
tenant=tenant)
self.policy_api.delete(lb_source_ip_persistence_profile_def)
def get(self, persistence_profile_id,
tenant=constants.POLICY_INFRA_TENANT):
lb_source_ip_persistence_profile_def = self.entry_def(
persistence_profile_id=persistence_profile_id,
tenant=tenant)
return self.policy_api.get(lb_source_ip_persistence_profile_def)
def list(self, tenant=constants.POLICY_INFRA_TENANT): def list(self, tenant=constants.POLICY_INFRA_TENANT):
lb_source_ip_persistence_profile_def = self.entry_def(tenant=tenant) lb_source_ip_persistence_profile_def = self.entry_def(tenant=tenant)
return self._list(lb_source_ip_persistence_profile_def) results = self._list(lb_source_ip_persistence_profile_def)
# filter the results by resource type
return [res for res in results
if res.get('resource_type') == self.entry_def.resource_type]
def update(self, persistence_profile_id, def update(self, persistence_profile_id,
name=IGNORE, name=IGNORE,
@@ -375,13 +404,6 @@ class NsxPolicyLoadBalancerLBSourceIpPersistenceProfileApi(
timeout=timeout, timeout=timeout,
tenant=tenant) tenant=tenant)
def get_path(self, profile_id,
tenant=constants.POLICY_INFRA_TENANT):
profile_def = self.entry_def(
persistence_profile_id=profile_id,
tenant=tenant)
return profile_def.get_resource_full_path()
class NsxPolicyLoadBalancerPoolApi(NsxPolicyResourceBase): class NsxPolicyLoadBalancerPoolApi(NsxPolicyResourceBase):
"""NSX Policy LBService.""" """NSX Policy LBService."""
@@ -1159,11 +1181,13 @@ class NsxPolicyLoadBalancerApi(object):
self.lb_fast_tcp_profile = NsxPolicyLBAppProfileFastTcpApi(*args) self.lb_fast_tcp_profile = NsxPolicyLBAppProfileFastTcpApi(*args)
self.lb_fast_udp_profile = NsxPolicyLBAppProfileFastUdpApi(*args) self.lb_fast_udp_profile = NsxPolicyLBAppProfileFastUdpApi(*args)
self.client_ssl_profile = ( self.client_ssl_profile = (
NsxPolicyLoadBalancerLBClientSSLProfileApi(*args)) NsxPolicyLoadBalancerClientSSLProfileApi(*args))
self.lb_persistence_profile = (
NsxPolicyLoadBalancerPersistenceProfileApi(*args))
self.lb_cookie_persistence_profile = ( self.lb_cookie_persistence_profile = (
NsxPolicyLoadBalancerLBCookiePersistenceProfileApi(*args)) NsxPolicyLoadBalancerCookiePersistenceProfileApi(*args))
self.lb_source_ip_persistence_profile = ( self.lb_source_ip_persistence_profile = (
NsxPolicyLoadBalancerLBSourceIpPersistenceProfileApi(*args)) NsxPolicyLoadBalancerSourceIpPersistenceProfileApi(*args))
self.lb_service = NsxPolicyLoadBalancerServiceApi(*args) self.lb_service = NsxPolicyLoadBalancerServiceApi(*args)
self.virtual_server = NsxPolicyLoadBalancerVirtualServerAPI(*args) self.virtual_server = NsxPolicyLoadBalancerVirtualServerAPI(*args)
self.lb_pool = NsxPolicyLoadBalancerPoolApi(*args) self.lb_pool = NsxPolicyLoadBalancerPoolApi(*args)