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:
@@ -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 = (
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user