From 9f280956c69304a7ba13a65581abc95b3ad228f6 Mon Sep 17 00:00:00 2001 From: "Jay Lau (Guangya Liu)" Date: Sun, 25 Jan 2015 21:29:44 -0500 Subject: [PATCH] Add project_id and user_id to db query filter project_id and user_id were added to the following db query filter: 1) container 2) node 3) bay 4) baymodel Implements part of bp multi-tenant Change-Id: I56488f8c333b917fe9ba7a23054999ec51f287f5 --- magnum/db/sqlalchemy/api.py | 16 ++++++++++++++++ magnum/tests/db/test_bay.py | 26 +++++++++++++++++++++----- magnum/tests/db/test_baymodel.py | 16 +++++++++++++--- magnum/tests/db/test_container.py | 18 +++++++++++++++--- magnum/tests/db/test_node.py | 18 +++++++++++++++--- 5 files changed, 80 insertions(+), 14 deletions(-) diff --git a/magnum/db/sqlalchemy/api.py b/magnum/db/sqlalchemy/api.py index 187a1fb3c0..b4313dd930 100644 --- a/magnum/db/sqlalchemy/api.py +++ b/magnum/db/sqlalchemy/api.py @@ -123,6 +123,10 @@ class Connection(api.Connection): query = query.filter_by(master_address=filters['master_address']) if 'minions_address' in filters: query = query.filter_by(minions_address=filters['minions_address']) + if 'project_id' in filters: + query = query.filter_by(project_id=filters['project_id']) + if 'user_id' in filters: + query = query.filter_by(user_id=filters['user_id']) return query @@ -247,6 +251,10 @@ class Connection(api.Connection): external_network_id=filters['external_network_id']) if 'dns_nameserver' in filters: query = query.filter_by(dns_nameserver=filters['dns_nameserver']) + if 'project_id' in filters: + query = query.filter_by(project_id=filters['project_id']) + if 'user_id' in filters: + query = query.filter_by(user_id=filters['user_id']) return query @@ -350,6 +358,10 @@ class Connection(api.Connection): query = query.filter_by(name=filters['name']) if 'image_id' in filters: query = query.filter_by(image_id=filters['image_id']) + if 'project_id' in filters: + query = query.filter_by(project_id=filters['project_id']) + if 'user_id' in filters: + query = query.filter_by(user_id=filters['user_id']) return query @@ -447,6 +459,10 @@ class Connection(api.Connection): query = query.filter_by(type=filters['type']) if 'image_id' in filters: query = query.filter_by(image_id=filters['image_id']) + if 'project_id' in filters: + query = query.filter_by(project_id=filters['project_id']) + if 'user_id' in filters: + query = query.filter_by(user_id=filters['user_id']) return query diff --git a/magnum/tests/db/test_bay.py b/magnum/tests/db/test_bay.py index eee451658d..40e36c813a 100644 --- a/magnum/tests/db/test_bay.py +++ b/magnum/tests/db/test_bay.py @@ -77,19 +77,27 @@ class DbBayTestCase(base.DbTestCase): self.assertEqual(uuids, dict((r[0], r[2]) for r in res)) def test_get_bayinfo_list_with_filters(self): - bm1 = utils.get_test_baymodel(id=1, uuid=magnum_utils.generate_uuid()) - bm2 = utils.get_test_baymodel(id=2, uuid=magnum_utils.generate_uuid()) + bm1 = utils.get_test_baymodel(id=1, uuid=magnum_utils.generate_uuid(), + project_id='fake-project1', + user_id='fake-user1') + bm2 = utils.get_test_baymodel(id=2, uuid=magnum_utils.generate_uuid(), + project_id='fake-project2', + user_id='fake-user2') self.dbapi.create_baymodel(bm1) self.dbapi.create_baymodel(bm2) bay1 = utils.create_test_bay(name='bay-one', uuid=magnum_utils.generate_uuid(), baymodel_id=bm1['uuid'], - node_count=1) + node_count=1, + project_id='fake-project1', + user_id='fake-user1') bay2 = utils.create_test_bay(name='bay-two', uuid=magnum_utils.generate_uuid(), baymodel_id=bm2['uuid'], - node_count=2) + node_count=2, + project_id='fake-project2', + user_id='fake-user2') res = self.dbapi.get_bayinfo_list(filters={'baymodel_id': bm1['uuid']}) self.assertEqual([bay1.id], [r.id for r in res]) @@ -106,9 +114,17 @@ class DbBayTestCase(base.DbTestCase): res = self.dbapi.get_bayinfo_list(filters={'node_count': 1}) self.assertEqual([bay1.id], [r[0] for r in res]) + res = self.dbapi.get_bayinfo_list(filters={ + 'project_id': 'fake-project1', 'user_id': 'fake-user1'}) + self.assertEqual([bay1.id], [r[0] for r in res]) + res = self.dbapi.get_bayinfo_list(filters={'node_count': 2}) self.assertEqual([bay2.id], [r[0] for r in res]) + res = self.dbapi.get_bayinfo_list(filters={ + 'project_id': 'fake-project2', 'user_id': 'fake-user2'}) + self.assertEqual([bay2.id], [r[0] for r in res]) + def test_get_bay_list(self): uuids = [] for i in range(1, 6): @@ -221,4 +237,4 @@ class DbBayTestCase(base.DbTestCase): bay = utils.create_test_bay() self.assertRaises(exception.InvalidParameterValue, self.dbapi.update_bay, bay.id, - {'uuid': ''}) \ No newline at end of file + {'uuid': ''}) diff --git a/magnum/tests/db/test_baymodel.py b/magnum/tests/db/test_baymodel.py index 0b4ef8f101..8095d0fe08 100644 --- a/magnum/tests/db/test_baymodel.py +++ b/magnum/tests/db/test_baymodel.py @@ -44,10 +44,12 @@ class DbBaymodelTestCase(base.DbTestCase): def test_get_baymodel_list_with_filters(self): bm1 = self._create_test_baymodel(id=1, name='bm-one', uuid=magnum_utils.generate_uuid(), - image_id='image1') + image_id='image1', project_id='fake-project1', + user_id='fake-user1') bm2 = self._create_test_baymodel(id=2, name='bm-two', uuid=magnum_utils.generate_uuid(), - image_id='image2') + image_id='image2', project_id='fake-project2', + user_id='fake-user2') res = self.dbapi.get_baymodel_list(filters={'name': 'bm-one'}) self.assertEqual([bm1['id']], [r.id for r in res]) @@ -58,9 +60,17 @@ class DbBaymodelTestCase(base.DbTestCase): res = self.dbapi.get_baymodel_list(filters={'image_id': 'image1'}) self.assertEqual([bm1['id']], [r.id for r in res]) + res = self.dbapi.get_baymodel_list(filters={ + 'prject_id': 'fake-project1', 'user_id': 'fake-user1'}) + self.assertEqual([bm1['id']], [r.id for r in res]) + res = self.dbapi.get_baymodel_list(filters={'image_id': 'image2'}) self.assertEqual([bm2['id']], [r.id for r in res]) + res = self.dbapi.get_baymodel_list(filters={ + 'prject_id': 'fake-project2', 'user_id': 'fake-user2'}) + self.assertEqual([bm2['id']], [r.id for r in res]) + def test_get_baymodelinfo_list_defaults(self): bm_id_list = [] for i in range(1, 6): @@ -142,4 +152,4 @@ class DbBaymodelTestCase(base.DbTestCase): self._create_test_baymodel(id=1, uuid=uuid) self.assertRaises(exception.BayModelAlreadyExists, self._create_test_baymodel, - id=2, uuid=uuid) \ No newline at end of file + id=2, uuid=uuid) diff --git a/magnum/tests/db/test_container.py b/magnum/tests/db/test_container.py index 07880307ff..3d606d033b 100644 --- a/magnum/tests/db/test_container.py +++ b/magnum/tests/db/test_container.py @@ -77,16 +77,28 @@ class DbContainerTestCase(base.DbTestCase): def test_get_containerinfo_list_with_filters(self): container1 = utils.create_test_container(name='c1', - uuid=magnum_utils.generate_uuid()) + uuid=magnum_utils.generate_uuid(), + project_id='fake-project1', + user_id='fake-user1') container2 = utils.create_test_container(name='c2', - uuid=magnum_utils.generate_uuid()) + uuid=magnum_utils.generate_uuid(), + project_id='fake-project2', + user_id='fake-user2') res = self.dbapi.get_containerinfo_list(filters={'name': 'c1'}) self.assertEqual([container1.id], [r[0] for r in res]) + res = self.dbapi.get_containerinfo_list(filters={ + 'project_id': 'fake-project1', 'user_id': 'fake-user1'}) + self.assertEqual([container1.id], [r[0] for r in res]) + res = self.dbapi.get_containerinfo_list(filters={'name': 'c2'}) self.assertEqual([container2.id], [r[0] for r in res]) + res = self.dbapi.get_containerinfo_list(filters={ + 'project_id': 'fake-project2', 'user_id': 'fake-user2'}) + self.assertEqual([container2.id], [r[0] for r in res]) + res = self.dbapi.get_containerinfo_list(filters={'name': 'bad-name'}) self.assertEqual([], [r[0] for r in res]) @@ -153,4 +165,4 @@ class DbContainerTestCase(base.DbTestCase): container = utils.create_test_container() self.assertRaises(exception.InvalidParameterValue, self.dbapi.update_container, container.id, - {'uuid': ''}) \ No newline at end of file + {'uuid': ''}) diff --git a/magnum/tests/db/test_node.py b/magnum/tests/db/test_node.py index 29b1e375f1..8933f1a8db 100644 --- a/magnum/tests/db/test_node.py +++ b/magnum/tests/db/test_node.py @@ -85,9 +85,13 @@ class DbNodeTestCase(base.DbTestCase): def test_get_nodeinfo_list_with_filters(self): node1 = utils.create_test_node(type='virt', ironic_node_id=magnum_utils.generate_uuid(), - uuid=magnum_utils.generate_uuid()) + uuid=magnum_utils.generate_uuid(), + project_id='fake-project1', + user_id='fake-user1') node2 = utils.create_test_node(type='bare', - uuid=magnum_utils.generate_uuid()) + uuid=magnum_utils.generate_uuid(), + project_id='fake-project2', + user_id='fake-user2') res = self.dbapi.get_nodeinfo_list(filters={'type': 'virt'}) self.assertEqual([node1.id], [r[0] for r in res]) @@ -98,9 +102,17 @@ class DbNodeTestCase(base.DbTestCase): res = self.dbapi.get_nodeinfo_list(filters={'associated': True}) self.assertEqual([node1.id], [r[0] for r in res]) + res = self.dbapi.get_nodeinfo_list(filters={ + 'project_id': 'fake-project1', 'user_id': 'fake-user1'}) + self.assertEqual([node1.id], [r[0] for r in res]) + res = self.dbapi.get_nodeinfo_list(filters={'associated': False}) self.assertEqual([node2.id], [r[0] for r in res]) + res = self.dbapi.get_nodeinfo_list(filters={ + 'project_id': 'fake-project2', 'user_id': 'fake-user2'}) + self.assertEqual([node2.id], [r[0] for r in res]) + def test_get_node_list(self): uuids = [] for i in range(1, 6): @@ -191,4 +203,4 @@ class DbNodeTestCase(base.DbTestCase): node2 = utils.create_test_node(uuid=magnum_utils.generate_uuid()) self.assertRaises(exception.InstanceAssociated, self.dbapi.update_node, node2.id, - {'ironic_node_id': new_i_uuid}) \ No newline at end of file + {'ironic_node_id': new_i_uuid})