diff --git a/magnum/db/sqlalchemy/api.py b/magnum/db/sqlalchemy/api.py index c6b337cdb9..cc847106a8 100644 --- a/magnum/db/sqlalchemy/api.py +++ b/magnum/db/sqlalchemy/api.py @@ -16,8 +16,6 @@ """SQLAlchemy storage backend.""" -import datetime - from oslo.config import cfg from oslo.db import exception as db_exc from oslo.db.sqlalchemy import session as db_session @@ -251,26 +249,19 @@ class Connection(api.Connection): if filters is None: filters = [] - if 'associated' in filters: - if filters['associated']: - query = query.filter(models.BayModel.instance_uuid is not None) - else: - query = query.filter(models.BayModel.instance_uuid is None) - if 'reserved' in filters: - if filters['reserved']: - query = query.filter(models.BayModel.reservation is not None) - else: - query = query.filter(models.BayModel.reservation is None) - if 'maintenance' in filters: - query = query.filter_by(maintenance=filters['maintenance']) - if 'driver' in filters: - query = query.filter_by(driver=filters['driver']) - if 'provision_state' in filters: - query = query.filter_by(provision_state=filters['provision_state']) - if 'provisioned_before' in filters: - limit = timeutils.utcnow() - datetime.timedelta( - seconds=filters['provisioned_before']) - query = query.filter(models.BayModel.provision_updated_at < limit) + if 'name' in filters: + query = query.filter_by(name=filters['name']) + if 'image_id' in filters: + query = query.filter_by(image_id=filters['image_id']) + if 'flavor_id' in filters: + query = query.filter_by(flavor_id=filters['flavor_id']) + if 'keypair_id' in filters: + query = query.filter_by(keypair_id=filters['keypair_id']) + if 'external_network_id' in filters: + query = query.filter_by( + external_network_id=filters['external_network_id']) + if 'dns_nameserver' in filters: + query = query.filter_by(dns_nameserver=filters['dns_nameserver']) return query diff --git a/magnum/tests/db/test_baymodels.py b/magnum/tests/db/test_baymodels.py index c9f103a2d9..0b4ef8f101 100644 --- a/magnum/tests/db/test_baymodels.py +++ b/magnum/tests/db/test_baymodels.py @@ -41,6 +41,48 @@ class DbBaymodelTestCase(base.DbTestCase): res_uuids = [r.uuid for r in res] self.assertEqual(sorted(uuids), sorted(res_uuids)) + 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') + bm2 = self._create_test_baymodel(id=2, name='bm-two', + uuid=magnum_utils.generate_uuid(), + image_id='image2') + + res = self.dbapi.get_baymodel_list(filters={'name': 'bm-one'}) + self.assertEqual([bm1['id']], [r.id for r in res]) + + res = self.dbapi.get_baymodel_list(filters={'name': 'bad-name'}) + self.assertEqual([], [r.id for r in res]) + + 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={'image_id': 'image2'}) + 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): + bm = self._create_test_baymodel(id=i, + uuid=magnum_utils.generate_uuid()) + bm_id_list.append(bm['id']) + res = [i[0] for i in self.dbapi.get_baymodelinfo_list()] + self.assertEqual(sorted(res), sorted(bm_id_list)) + + def test_get_baymodelinfo_list_with_cols(self): + uuids = {} + names = {} + for i in range(1, 6): + uuid = magnum_utils.generate_uuid() + name = "node" + str(i) + bm = self._create_test_baymodel(id=i, name=name, uuid=uuid) + uuids[bm['id']] = uuid + names[bm['id']] = name + res = self.dbapi.get_baymodelinfo_list(columns=['id', 'name', 'uuid']) + self.assertEqual(names, dict((r[0], r[1]) for r in res)) + self.assertEqual(uuids, dict((r[0], r[2]) for r in res)) + def test_get_baymodel_by_id(self): bm = self._create_test_baymodel() baymodel = self.dbapi.get_baymodel_by_id(bm['id'])