Fix dbapi method _add_baymodels_filters

Change-Id: Id522322a461bcbed50970c22dceecbc87cab1c39
This commit is contained in:
Hongbin Lu 2015-01-07 17:46:23 +00:00
parent decfb9c747
commit 9ab299d69a
2 changed files with 55 additions and 22 deletions

View File

@ -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

View File

@ -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'])