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)
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(
test_resources.NsxPolicyLibTestCase):
@@ -211,7 +264,9 @@ class TestPolicyLBCookiePersistenceProfile(
name = 'd1'
with mock.patch.object(
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)
self.assertIsNotNone(obj)
expected_def = (
@@ -220,14 +275,19 @@ class TestPolicyLBCookiePersistenceProfile(
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:
with mock.patch.object(
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)
expected_def = (
lb_defs.LBCookiePersistenceProfileDef(
tenant=TEST_TENANT))
self.assert_called_with_def(api_call, expected_def)
self.assertEqual([], result)
self.assertEqual(1, len(result))
def test_update(self):
obj_id = '111'
@@ -348,7 +408,9 @@ class TestPolicyLBSourceIpProfileApi(test_resources.NsxPolicyLibTestCase):
name = 'd1'
with mock.patch.object(
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)
self.assertIsNotNone(obj)
expected_def = (

View File

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

View File

@@ -154,7 +154,7 @@ class NsxPolicyLBAppProfileFastUdpApi(
return lb_defs.LBFastUdpProfile
class NsxPolicyLoadBalancerLBClientSSLProfileApi(NsxPolicyResourceBase):
class NsxPolicyLoadBalancerClientSSLProfileApi(NsxPolicyResourceBase):
"""NSX Policy LB client ssl profile"""
@property
@@ -219,9 +219,67 @@ class NsxPolicyLoadBalancerLBClientSSLProfileApi(NsxPolicyResourceBase):
return profile_def.get_resource_full_path()
class NsxPolicyLoadBalancerLBCookiePersistenceProfileApi(
class NsxPolicyLoadBalancerPersistenceProfileApi(
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
def entry_def(self):
@@ -255,23 +313,12 @@ class NsxPolicyLoadBalancerLBCookiePersistenceProfileApi(
self._create_or_store(lb_cookie_persistence_profile_def)
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):
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,
name=IGNORE,
@@ -297,17 +344,10 @@ class NsxPolicyLoadBalancerLBCookiePersistenceProfileApi(
persistence_shared=persistence_shared,
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 NsxPolicyLoadBalancerLBSourceIpPersistenceProfileApi(
NsxPolicyResourceBase):
"""NSX Policy LB client ssl profile"""
class NsxPolicyLoadBalancerSourceIpPersistenceProfileApi(
NsxPolicyLoadBalancerPersistenceProfileApi):
"""NSX Policy LB source ip persistence profile"""
@property
def entry_def(self):
@@ -337,23 +377,12 @@ class NsxPolicyLoadBalancerLBSourceIpPersistenceProfileApi(
self._create_or_store(lb_source_ip_persistence_profile_def)
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):
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,
name=IGNORE,
@@ -375,13 +404,6 @@ class NsxPolicyLoadBalancerLBSourceIpPersistenceProfileApi(
timeout=timeout,
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):
"""NSX Policy LBService."""
@@ -1159,11 +1181,13 @@ class NsxPolicyLoadBalancerApi(object):
self.lb_fast_tcp_profile = NsxPolicyLBAppProfileFastTcpApi(*args)
self.lb_fast_udp_profile = NsxPolicyLBAppProfileFastUdpApi(*args)
self.client_ssl_profile = (
NsxPolicyLoadBalancerLBClientSSLProfileApi(*args))
NsxPolicyLoadBalancerClientSSLProfileApi(*args))
self.lb_persistence_profile = (
NsxPolicyLoadBalancerPersistenceProfileApi(*args))
self.lb_cookie_persistence_profile = (
NsxPolicyLoadBalancerLBCookiePersistenceProfileApi(*args))
NsxPolicyLoadBalancerCookiePersistenceProfileApi(*args))
self.lb_source_ip_persistence_profile = (
NsxPolicyLoadBalancerLBSourceIpPersistenceProfileApi(*args))
NsxPolicyLoadBalancerSourceIpPersistenceProfileApi(*args))
self.lb_service = NsxPolicyLoadBalancerServiceApi(*args)
self.virtual_server = NsxPolicyLoadBalancerVirtualServerAPI(*args)
self.lb_pool = NsxPolicyLoadBalancerPoolApi(*args)