From 150139321a6fb8cafe2d2ca922d2efb8801d1227 Mon Sep 17 00:00:00 2001 From: "Jay Lau (Guangya Liu)" Date: Thu, 5 Feb 2015 12:30:53 +0800 Subject: [PATCH] Enable multi tenant for k8s resource get_xxx_list 1) get_pdod_list 2) get_service_list 3) get_rc_list Implements part of bp multi-tenant Change-Id: I40cefd7f4f637808afbcf172a5d98fddee066f2b --- magnum/db/api.py | 9 ++++--- magnum/db/sqlalchemy/api.py | 9 ++++--- magnum/objects/pod.py | 2 +- magnum/objects/replicationcontroller.py | 2 +- magnum/objects/service.py | 2 +- magnum/tests/db/test_pod.py | 25 ++++++++++++------- magnum/tests/db/test_replicationcontroller.py | 7 +++--- magnum/tests/db/test_service.py | 25 ++++++++++++------- 8 files changed, 51 insertions(+), 30 deletions(-) diff --git a/magnum/db/api.py b/magnum/db/api.py index 1ea77edde7..72e4d1b794 100644 --- a/magnum/db/api.py +++ b/magnum/db/api.py @@ -342,13 +342,14 @@ class Connection(object): :raises: NodeNotFound """ @abc.abstractmethod - def get_pod_list(self, columns=None, filters=None, limit=None, + def get_pod_list(self, context, columns=None, filters=None, limit=None, marker=None, sort_key=None, sort_dir=None): """Get specific columns for matching pods. Return a list of the specified columns for all pods that match the specified filters. + :param context: The security context :param columns: List of column names to return. Defaults to 'id' column when columns == None. :param filters: Filters to apply. Defaults to None. @@ -430,13 +431,14 @@ class Connection(object): """ @abc.abstractmethod - def get_service_list(self, columns=None, filters=None, limit=None, + def get_service_list(self, context, columns=None, filters=None, limit=None, marker=None, sort_key=None, sort_dir=None): """Get specific columns for matching services. Return a list of the specified columns for all services that match the specified filters. + :param context: The security context :param columns: List of column names to return. Defaults to 'id' column when columns == None. :param filters: Filters to apply. Defaults to None. @@ -511,13 +513,14 @@ class Connection(object): """ @abc.abstractmethod - def get_rc_list(self, columns=None, filters=None, limit=None, + def get_rc_list(self, context, columns=None, filters=None, limit=None, marker=None, sort_key=None, sort_dir=None): """Get specific columns for matching ReplicationController. Return a list of the specified columns for all rcs that match the specified filters. + :param context: The security context :param columns: List of column names to return. Defaults to 'id' column when columns == None. :param filters: Filters to apply. Defaults to None. diff --git a/magnum/db/sqlalchemy/api.py b/magnum/db/sqlalchemy/api.py index d9c63655a5..b642279735 100644 --- a/magnum/db/sqlalchemy/api.py +++ b/magnum/db/sqlalchemy/api.py @@ -617,9 +617,10 @@ class Connection(api.Connection): return _paginate_query(models.Pod, limit, marker, sort_key, sort_dir, query) - def get_pod_list(self, filters=None, limit=None, marker=None, + def get_pod_list(self, context, filters=None, limit=None, marker=None, sort_key=None, sort_dir=None): query = model_query(models.Pod) + query = self._add_tenant_filters(context, query) query = self._add_pods_filters(query, filters) return _paginate_query(models.Pod, limit, marker, sort_key, sort_dir, query) @@ -729,9 +730,10 @@ class Connection(api.Connection): return _paginate_query(models.Service, limit, marker, sort_key, sort_dir, query) - def get_service_list(self, filters=None, limit=None, marker=None, + def get_service_list(self, context, filters=None, limit=None, marker=None, sort_key=None, sort_dir=None): query = model_query(models.Service) + query = self._add_tenant_filters(context, query) query = self._add_services_filters(query, filters) return _paginate_query(models.Service, limit, marker, sort_key, sort_dir, query) @@ -831,9 +833,10 @@ class Connection(api.Connection): return _paginate_query(models.ReplicationController, limit, marker, sort_key, sort_dir, query) - def get_rc_list(self, filters=None, limit=None, marker=None, + def get_rc_list(self, context, filters=None, limit=None, marker=None, sort_key=None, sort_dir=None): query = model_query(models.ReplicationController) + query = self._add_tenant_filters(context, query) query = self._add_rcs_filters(query, filters) return _paginate_query(models.ReplicationController, limit, marker, sort_key, sort_dir, query) diff --git a/magnum/objects/pod.py b/magnum/objects/pod.py index f8f3aeaac6..55cc0ed556 100644 --- a/magnum/objects/pod.py +++ b/magnum/objects/pod.py @@ -133,7 +133,7 @@ class Pod(base.MagnumObject): :returns: a list of :class:`Pod` object. """ - db_pods = cls.dbapi.get_pod_list(limit=limit, + db_pods = cls.dbapi.get_pod_list(context, limit=limit, marker=marker, sort_key=sort_key, sort_dir=sort_dir) diff --git a/magnum/objects/replicationcontroller.py b/magnum/objects/replicationcontroller.py index 5cc577b8d1..7893c44ef9 100644 --- a/magnum/objects/replicationcontroller.py +++ b/magnum/objects/replicationcontroller.py @@ -126,7 +126,7 @@ class ReplicationController(base.MagnumObject): :returns: a list of :class:`ReplicationController` object. """ - db_rcs = cls.dbapi.get_rc_list(limit=limit, + db_rcs = cls.dbapi.get_rc_list(context, limit=limit, marker=marker, sort_key=sort_key, sort_dir=sort_dir) diff --git a/magnum/objects/service.py b/magnum/objects/service.py index ef4144bf75..2b13ec771d 100644 --- a/magnum/objects/service.py +++ b/magnum/objects/service.py @@ -122,7 +122,7 @@ class Service(base.MagnumObject): :returns: a list of :class:`Service` object. """ - db_services = cls.dbapi.get_service_list(limit=limit, + db_services = cls.dbapi.get_service_list(context, limit=limit, marker=marker, sort_key=sort_key, sort_dir=sort_dir) diff --git a/magnum/tests/db/test_pod.py b/magnum/tests/db/test_pod.py index 349d56b608..8eba41c478 100644 --- a/magnum/tests/db/test_pod.py +++ b/magnum/tests/db/test_pod.py @@ -127,7 +127,7 @@ class DbPodTestCase(base.DbTestCase): pod = utils.create_test_pod(uuid=magnum_utils.generate_uuid(), bay_uuid=self.bay.uuid) uuids.append(six.text_type(pod.uuid)) - res = self.dbapi.get_pod_list() + res = self.dbapi.get_pod_list(self.context) res_uuids = [r.uuid for r in res] self.assertEqual(sorted(uuids), sorted(res_uuids)) @@ -146,28 +146,35 @@ class DbPodTestCase(base.DbTestCase): bay_uuid=bay2['uuid'], status='status2') - res = self.dbapi.get_pod_list(filters={'bay_uuid': bay1['uuid']}) + res = self.dbapi.get_pod_list(self.context, + filters={'bay_uuid': bay1['uuid']}) self.assertEqual([pod1.id], [r.id for r in res]) - res = self.dbapi.get_pod_list(filters={'bay_uuid': bay2['uuid']}) + res = self.dbapi.get_pod_list(self.context, + filters={'bay_uuid': bay2['uuid']}) self.assertEqual([pod2.id], [r.id for r in res]) - res = self.dbapi.get_pod_list(filters={'name': 'pod-one'}) + res = self.dbapi.get_pod_list(self.context, + filters={'name': 'pod-one'}) self.assertEqual([pod1.id], [r.id for r in res]) - res = self.dbapi.get_pod_list(filters={'name': 'bad-pod'}) + res = self.dbapi.get_pod_list(self.context, + filters={'name': 'bad-pod'}) self.assertEqual([], [r.id for r in res]) - res = self.dbapi.get_pod_list(filters={'status': 'status1'}) + res = self.dbapi.get_pod_list(self.context, + filters={'status': 'status1'}) self.assertEqual([pod1.id], [r.id for r in res]) - res = self.dbapi.get_pod_list(filters={'status': 'status2'}) + res = self.dbapi.get_pod_list(self.context, + filters={'status': 'status2'}) self.assertEqual([pod2.id], [r.id for r in res]) def test_get_pod_list_bay_not_exist(self): - res = self.dbapi.get_pod_list({'bay_uuid': self.bay.uuid}) + res = self.dbapi.get_pod_list(self.context, + {'bay_uuid': self.bay.uuid}) self.assertEqual(1, len(res)) - res = self.dbapi.get_pod_list({ + res = self.dbapi.get_pod_list(self.context, { 'bay_uuid': magnum_utils.generate_uuid()}) self.assertEqual(0, len(res)) diff --git a/magnum/tests/db/test_replicationcontroller.py b/magnum/tests/db/test_replicationcontroller.py index 3eba858ea6..7fb9519e73 100644 --- a/magnum/tests/db/test_replicationcontroller.py +++ b/magnum/tests/db/test_replicationcontroller.py @@ -118,14 +118,15 @@ class DbRCTestCase(base.DbTestCase): rc = utils.create_test_rc(bay_uuid=self.bay.uuid, uuid=magnum_utils.generate_uuid()) uuids.append(six.text_type(rc.uuid)) - rc = self.dbapi.get_rc_list() + rc = self.dbapi.get_rc_list(self.context) rc_uuids = [r.uuid for r in rc] self.assertEqual(sorted(uuids), sorted(rc_uuids)) def test_get_rc_list_bay_not_exist(self): - rc = self.dbapi.get_rc_list({'bay_uuid': self.bay.uuid}) + rc = self.dbapi.get_rc_list(self.context, + {'bay_uuid': self.bay.uuid}) self.assertEqual(1, len(rc)) - rc = self.dbapi.get_rc_list({ + rc = self.dbapi.get_rc_list(self.context, { 'bay_uuid': magnum_utils.generate_uuid()}) self.assertEqual(0, len(rc)) diff --git a/magnum/tests/db/test_service.py b/magnum/tests/db/test_service.py index 25f3ef789c..e61aab147e 100644 --- a/magnum/tests/db/test_service.py +++ b/magnum/tests/db/test_service.py @@ -121,7 +121,7 @@ class DbServiceTestCase(base.DbTestCase): service = utils.create_test_service(bay_uuid=self.bay.uuid, uuid=magnum_utils.generate_uuid()) uuids.append(six.text_type(service.uuid)) - res = self.dbapi.get_service_list() + res = self.dbapi.get_service_list(self.context) res_uuids = [r.uuid for r in res] self.assertEqual(sorted(uuids), sorted(res_uuids)) @@ -140,28 +140,35 @@ class DbServiceTestCase(base.DbTestCase): bay_uuid=bay2['uuid'], port=8001) - res = self.dbapi.get_service_list(filters={'bay_uuid': bay1['uuid']}) + res = self.dbapi.get_service_list(self.context, + filters={'bay_uuid': bay1['uuid']}) self.assertEqual([service1.id], [r.id for r in res]) - res = self.dbapi.get_service_list(filters={'bay_uuid': bay2['uuid']}) + res = self.dbapi.get_service_list(self.context, + filters={'bay_uuid': bay2['uuid']}) self.assertEqual([service2.id], [r.id for r in res]) - res = self.dbapi.get_service_list(filters={'name': 'service-one'}) + res = self.dbapi.get_service_list(self.context, + filters={'name': 'service-one'}) self.assertEqual([service1.id], [r.id for r in res]) - res = self.dbapi.get_service_list(filters={'name': 'bad-service'}) + res = self.dbapi.get_service_list(self.context, + filters={'name': 'bad-service'}) self.assertEqual([], [r.id for r in res]) - res = self.dbapi.get_service_list(filters={'port': 8000}) + res = self.dbapi.get_service_list(self.context, + filters={'port': 8000}) self.assertEqual([service1.id], [r.id for r in res]) - res = self.dbapi.get_service_list(filters={'port': 8001}) + res = self.dbapi.get_service_list(self.context, + filters={'port': 8001}) self.assertEqual([service2.id], [r.id for r in res]) def test_get_service_list_bay_not_exist(self): - res = self.dbapi.get_service_list({'bay_uuid': self.bay.uuid}) + res = self.dbapi.get_service_list(self.context, + {'bay_uuid': self.bay.uuid}) self.assertEqual(1, len(res)) - res = self.dbapi.get_service_list({ + res = self.dbapi.get_service_list(self.context, { 'bay_uuid': magnum_utils.generate_uuid()}) self.assertEqual(0, len(res))