diff --git a/vmware_nsxlib/tests/unit/v3/policy/test_lb_resources.py b/vmware_nsxlib/tests/unit/v3/policy/test_lb_resources.py index 14e27721..84c6dd63 100644 --- a/vmware_nsxlib/tests/unit/v3/policy/test_lb_resources.py +++ b/vmware_nsxlib/tests/unit/v3/policy/test_lb_resources.py @@ -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 = ( diff --git a/vmware_nsxlib/v3/exceptions.py b/vmware_nsxlib/v3/exceptions.py index f74547ec..83bbac62 100644 --- a/vmware_nsxlib/v3/exceptions.py +++ b/vmware_nsxlib/v3/exceptions.py @@ -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") diff --git a/vmware_nsxlib/v3/policy/lb_resources.py b/vmware_nsxlib/v3/policy/lb_resources.py index 675bd5b7..594c7d25 100644 --- a/vmware_nsxlib/v3/policy/lb_resources.py +++ b/vmware_nsxlib/v3/policy/lb_resources.py @@ -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)