Fix console db can't load attribute pool
Lists consoles failed when populate console_type from console db's pool attribute. The reason was db api console_get_all_by_instance didn't join with pool. So add param 'columns_to_join' for db api, and join pool attribute when lists consoles. Change-Id: I18b44860270a401c55cf02b4334b973fbf357b03 Closes-bug: #1223205
This commit is contained in:
parent
97c49e1786
commit
18f417c14a
@ -36,7 +36,8 @@ class API(base.Base):
|
||||
super(API, self).__init__(**kwargs)
|
||||
|
||||
def get_consoles(self, context, instance_uuid):
|
||||
return self.db.console_get_all_by_instance(context, instance_uuid)
|
||||
return self.db.console_get_all_by_instance(context, instance_uuid,
|
||||
columns_to_join=['pool'])
|
||||
|
||||
def get_console(self, context, instance_uuid, console_uuid):
|
||||
return self.db.console_get(context, console_uuid, instance_uuid)
|
||||
|
@ -1379,9 +1379,10 @@ def console_get_by_pool_instance(context, pool_id, instance_uuid):
|
||||
return IMPL.console_get_by_pool_instance(context, pool_id, instance_uuid)
|
||||
|
||||
|
||||
def console_get_all_by_instance(context, instance_uuid):
|
||||
def console_get_all_by_instance(context, instance_uuid, columns_to_join=None):
|
||||
"""Get consoles for a given instance."""
|
||||
return IMPL.console_get_all_by_instance(context, instance_uuid)
|
||||
return IMPL.console_get_all_by_instance(context, instance_uuid,
|
||||
columns_to_join)
|
||||
|
||||
|
||||
def console_get(context, console_id, instance_uuid=None):
|
||||
|
@ -4085,10 +4085,13 @@ def console_get_by_pool_instance(context, pool_id, instance_uuid):
|
||||
return result
|
||||
|
||||
|
||||
def console_get_all_by_instance(context, instance_uuid):
|
||||
return model_query(context, models.Console, read_deleted="yes").\
|
||||
filter_by(instance_uuid=instance_uuid).\
|
||||
all()
|
||||
def console_get_all_by_instance(context, instance_uuid, columns_to_join=None):
|
||||
query = model_query(context, models.Console, read_deleted="yes").\
|
||||
filter_by(instance_uuid=instance_uuid)
|
||||
if columns_to_join:
|
||||
for column in columns_to_join:
|
||||
query = query.options(joinedload(column))
|
||||
return query.all()
|
||||
|
||||
|
||||
def console_get(context, console_id, instance_uuid=None):
|
||||
|
@ -144,7 +144,8 @@ class ConsoleAPITestCase(test.TestCase):
|
||||
return self.fake_console
|
||||
self.stubs.Set(db, 'console_get', _fake_db_console_get)
|
||||
|
||||
def _fake_db_console_get_all_by_instance(_ctxt, _instance_uuid):
|
||||
def _fake_db_console_get_all_by_instance(_ctxt, _instance_uuid,
|
||||
columns_to_join):
|
||||
return [self.fake_console]
|
||||
self.stubs.Set(db, 'console_get_all_by_instance',
|
||||
_fake_db_console_get_all_by_instance)
|
||||
|
@ -5524,7 +5524,7 @@ class ConsoleTestCase(test.TestCase, ModelsObjectComparatorMixin):
|
||||
'compute_host': 'compute_host2',
|
||||
},
|
||||
]
|
||||
console_pools = [db.console_pool_create(self.ctxt, val)
|
||||
self.console_pools = [db.console_pool_create(self.ctxt, val)
|
||||
for val in pools_data]
|
||||
instance_uuid = uuidutils.generate_uuid()
|
||||
db.instance_create(self.ctxt, {'uuid': instance_uuid})
|
||||
@ -5532,7 +5532,7 @@ class ConsoleTestCase(test.TestCase, ModelsObjectComparatorMixin):
|
||||
('instance_uuid', instance_uuid),
|
||||
('password', 'pass' + str(x)),
|
||||
('port', 7878 + x),
|
||||
('pool_id', console_pools[x]['id'])])
|
||||
('pool_id', self.console_pools[x]['id'])])
|
||||
for x in xrange(len(pools_data))]
|
||||
self.consoles = [db.console_create(self.ctxt, val)
|
||||
for val in self.console_data]
|
||||
@ -5570,6 +5570,15 @@ class ConsoleTestCase(test.TestCase, ModelsObjectComparatorMixin):
|
||||
consoles_get = db.console_get_all_by_instance(self.ctxt, instance_uuid)
|
||||
self._assertEqualListsOfObjects(self.consoles, consoles_get)
|
||||
|
||||
def test_console_get_all_by_instance_with_pool(self):
|
||||
instance_uuid = self.consoles[0]['instance_uuid']
|
||||
consoles_get = db.console_get_all_by_instance(self.ctxt, instance_uuid,
|
||||
columns_to_join=['pool'])
|
||||
self._assertEqualListsOfObjects(self.consoles, consoles_get,
|
||||
ignored_keys=['pool'])
|
||||
self._assertEqualListsOfObjects([pool for pool in self.console_pools],
|
||||
[c['pool'] for c in consoles_get])
|
||||
|
||||
def test_console_get_all_by_instance_empty(self):
|
||||
consoles_get = db.console_get_all_by_instance(self.ctxt,
|
||||
uuidutils.generate_uuid())
|
||||
|
Loading…
Reference in New Issue
Block a user