Merge "Add Instance.get_by_id() query method"
This commit is contained in:
commit
b14f9cd142
|
@ -603,9 +603,10 @@ def instance_get_by_uuid(context, uuid, columns_to_join=None):
|
|||
return IMPL.instance_get_by_uuid(context, uuid, columns_to_join)
|
||||
|
||||
|
||||
def instance_get(context, instance_id):
|
||||
def instance_get(context, instance_id, columns_to_join=None):
|
||||
"""Get an instance or raise if it does not exist."""
|
||||
return IMPL.instance_get(context, instance_id)
|
||||
return IMPL.instance_get(context, instance_id,
|
||||
columns_to_join=columns_to_join)
|
||||
|
||||
|
||||
def instance_get_all(context, columns_to_join=None):
|
||||
|
|
|
@ -1562,9 +1562,10 @@ def _instance_get_by_uuid(context, uuid, session=None, columns_to_join=None):
|
|||
|
||||
|
||||
@require_context
|
||||
def instance_get(context, instance_id):
|
||||
def instance_get(context, instance_id, columns_to_join=None):
|
||||
try:
|
||||
result = _build_instance_get(context).filter_by(id=instance_id).first()
|
||||
result = _build_instance_get(context, columns_to_join=columns_to_join
|
||||
).filter_by(id=instance_id).first()
|
||||
|
||||
if not result:
|
||||
raise exception.InstanceNotFound(instance_id=instance_id)
|
||||
|
|
|
@ -218,23 +218,36 @@ class Instance(base.NovaObject):
|
|||
instance.obj_reset_changes()
|
||||
return instance
|
||||
|
||||
@base.remotable_classmethod
|
||||
def get_by_uuid(cls, context, uuid, expected_attrs=None):
|
||||
if expected_attrs is None:
|
||||
expected_attrs = []
|
||||
|
||||
# Construct DB-specific columns from generic expected_attrs
|
||||
@staticmethod
|
||||
def _attrs_to_columns(attrs):
|
||||
"""Translate instance attributes into columns needing joining."""
|
||||
columns_to_join = []
|
||||
if 'metadata' in expected_attrs:
|
||||
if 'metadata' in attrs:
|
||||
columns_to_join.append('metadata')
|
||||
if 'system_metadata' in expected_attrs:
|
||||
if 'system_metadata' in attrs:
|
||||
columns_to_join.append('system_metadata')
|
||||
# NOTE(danms): The DB API currently always joins info_cache and
|
||||
# security_groups for get operations, so don't add them to the
|
||||
# list of columns
|
||||
return columns_to_join
|
||||
|
||||
@base.remotable_classmethod
|
||||
def get_by_uuid(cls, context, uuid, expected_attrs=None):
|
||||
if expected_attrs is None:
|
||||
expected_attrs = []
|
||||
columns_to_join = cls._attrs_to_columns(expected_attrs)
|
||||
db_inst = db.instance_get_by_uuid(context, uuid,
|
||||
columns_to_join)
|
||||
columns_to_join=columns_to_join)
|
||||
return Instance._from_db_object(context, cls(), db_inst,
|
||||
expected_attrs)
|
||||
|
||||
@base.remotable_classmethod
|
||||
def get_by_id(cls, context, inst_id, expected_attrs=None):
|
||||
if expected_attrs is None:
|
||||
expected_attrs = []
|
||||
columns_to_join = cls._attrs_to_columns(expected_attrs)
|
||||
db_inst = db.instance_get(context, inst_id,
|
||||
columns_to_join=columns_to_join)
|
||||
return Instance._from_db_object(context, cls(), db_inst,
|
||||
expected_attrs)
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ class DiskConfigTestCase(test.TestCase):
|
|||
|
||||
self.stubs.Set(db, 'instance_get', fake_instance_get)
|
||||
|
||||
def fake_instance_get_by_uuid(context, uuid, columns_to_get=None):
|
||||
def fake_instance_get_by_uuid(context, uuid, columns_to_join=None):
|
||||
for instance in FAKE_INSTANCES:
|
||||
if uuid == instance['uuid']:
|
||||
return instance
|
||||
|
|
|
@ -23,7 +23,7 @@ from nova import test
|
|||
from nova.tests.api.openstack import fakes
|
||||
|
||||
|
||||
def fake_instance_get(self, context, instance_id):
|
||||
def fake_instance_get(context, instance_id, columns_to_join=None):
|
||||
result = fakes.stub_instance(id=1, uuid=instance_id)
|
||||
result['created_at'] = None
|
||||
result['deleted_at'] = None
|
||||
|
|
|
@ -242,7 +242,7 @@ class ServersControllerTest(test.TestCase):
|
|||
"""Create two servers with the same host and different
|
||||
project_ids and check that the hostId's are unique.
|
||||
"""
|
||||
def return_instance_with_host(self, *args):
|
||||
def return_instance_with_host(self, *args, **kwargs):
|
||||
project_id = str(uuid.uuid4())
|
||||
return fakes.stub_instance(id=1, uuid=FAKE_UUID,
|
||||
project_id=project_id,
|
||||
|
|
|
@ -4522,7 +4522,7 @@ class ComputeTestCase(BaseTestCase):
|
|||
'status': None})
|
||||
|
||||
def fake_instance_get_by_uuid(context, instance_uuid,
|
||||
cols_to_join=None):
|
||||
columns_to_join=None):
|
||||
# raise InstanceNotFound exception for uuid 'noexist'
|
||||
if instance_uuid == 'noexist':
|
||||
raise exception.InstanceNotFound(instance_id=instance_uuid)
|
||||
|
@ -6541,7 +6541,7 @@ class ComputeAPITestCase(BaseTestCase):
|
|||
expected = dict(exp_instance.iteritems())
|
||||
expected['name'] = exp_instance['name']
|
||||
|
||||
def fake_db_get(_context, _instance_uuid):
|
||||
def fake_db_get(_context, _instance_uuid, columns_to_join=None):
|
||||
return exp_instance
|
||||
|
||||
self.stubs.Set(db, 'instance_get_by_uuid', fake_db_get)
|
||||
|
@ -6556,7 +6556,7 @@ class ComputeAPITestCase(BaseTestCase):
|
|||
expected = dict(exp_instance.iteritems())
|
||||
expected['name'] = exp_instance['name']
|
||||
|
||||
def fake_db_get(context, instance_uuid):
|
||||
def fake_db_get(context, instance_uuid, columns_to_join=None):
|
||||
return exp_instance
|
||||
|
||||
self.stubs.Set(db, 'instance_get_by_uuid', fake_db_get)
|
||||
|
@ -6570,7 +6570,7 @@ class ComputeAPITestCase(BaseTestCase):
|
|||
expected = dict(exp_instance.iteritems())
|
||||
expected['name'] = exp_instance['name']
|
||||
|
||||
def fake_db_get(_context, _instance_id):
|
||||
def fake_db_get(_context, _instance_id, columns_to_join=None):
|
||||
return exp_instance
|
||||
|
||||
self.stubs.Set(db, 'instance_get', fake_db_get)
|
||||
|
|
|
@ -93,7 +93,8 @@ class _TestInstanceObject(object):
|
|||
def test_get_without_expected(self):
|
||||
ctxt = context.get_admin_context()
|
||||
self.mox.StubOutWithMock(db, 'instance_get_by_uuid')
|
||||
db.instance_get_by_uuid(ctxt, 'uuid', []).AndReturn(self.fake_instance)
|
||||
db.instance_get_by_uuid(ctxt, 'uuid', columns_to_join=[]
|
||||
).AndReturn(self.fake_instance)
|
||||
self.mox.ReplayAll()
|
||||
inst = instance.Instance.get_by_uuid(ctxt, 'uuid')
|
||||
# Make sure these weren't loaded
|
||||
|
@ -107,7 +108,8 @@ class _TestInstanceObject(object):
|
|||
self.mox.StubOutWithMock(db, 'instance_get_by_uuid')
|
||||
db.instance_get_by_uuid(
|
||||
ctxt, 'uuid',
|
||||
['metadata', 'system_metadata']).AndReturn(self.fake_instance)
|
||||
columns_to_join=['metadata', 'system_metadata']
|
||||
).AndReturn(self.fake_instance)
|
||||
self.mox.ReplayAll()
|
||||
inst = instance.Instance.get_by_uuid(
|
||||
ctxt, 'uuid', expected_attrs=instance.INSTANCE_OPTIONAL_FIELDS)
|
||||
|
@ -116,15 +118,26 @@ class _TestInstanceObject(object):
|
|||
self.assertTrue(hasattr(inst, attrname))
|
||||
self.assertRemotes()
|
||||
|
||||
def test_get_by_id(self):
|
||||
ctxt = context.get_admin_context()
|
||||
self.mox.StubOutWithMock(db, 'instance_get')
|
||||
db.instance_get(ctxt, 'instid', columns_to_join=[]
|
||||
).AndReturn(self.fake_instance)
|
||||
self.mox.ReplayAll()
|
||||
inst = instance.Instance.get_by_id(ctxt, 'instid')
|
||||
self.assertEqual(inst.uuid, self.fake_instance['uuid'])
|
||||
self.assertRemotes()
|
||||
|
||||
def test_load(self):
|
||||
ctxt = context.get_admin_context()
|
||||
self.mox.StubOutWithMock(db, 'instance_get_by_uuid')
|
||||
fake_uuid = self.fake_instance['uuid']
|
||||
db.instance_get_by_uuid(ctxt, fake_uuid, []).AndReturn(
|
||||
self.fake_instance)
|
||||
db.instance_get_by_uuid(ctxt, fake_uuid, columns_to_join=[]
|
||||
).AndReturn(self.fake_instance)
|
||||
fake_inst2 = dict(self.fake_instance,
|
||||
system_metadata=[{'key': 'foo', 'value': 'bar'}])
|
||||
db.instance_get_by_uuid(ctxt, fake_uuid, ['system_metadata']
|
||||
db.instance_get_by_uuid(ctxt, fake_uuid,
|
||||
columns_to_join=['system_metadata']
|
||||
).AndReturn(fake_inst2)
|
||||
self.mox.ReplayAll()
|
||||
inst = instance.Instance.get_by_uuid(ctxt, fake_uuid)
|
||||
|
@ -142,8 +155,8 @@ class _TestInstanceObject(object):
|
|||
ctxt = context.get_admin_context()
|
||||
self.mox.StubOutWithMock(db, 'instance_get_by_uuid')
|
||||
fake_instance = self.fake_instance
|
||||
db.instance_get_by_uuid(ctxt, 'fake-uuid', []).AndReturn(
|
||||
fake_instance)
|
||||
db.instance_get_by_uuid(ctxt, 'fake-uuid', columns_to_join=[]
|
||||
).AndReturn(fake_instance)
|
||||
self.mox.ReplayAll()
|
||||
inst = instance.Instance.get_by_uuid(ctxt, 'fake-uuid')
|
||||
self.assertEqual(inst.id, fake_instance['id'])
|
||||
|
@ -158,10 +171,12 @@ class _TestInstanceObject(object):
|
|||
ctxt = context.get_admin_context()
|
||||
self.mox.StubOutWithMock(db, 'instance_get_by_uuid')
|
||||
fake_uuid = self.fake_instance['uuid']
|
||||
db.instance_get_by_uuid(ctxt, fake_uuid, []).AndReturn(
|
||||
dict(self.fake_instance, host='orig-host'))
|
||||
db.instance_get_by_uuid(ctxt, fake_uuid, []).AndReturn(
|
||||
dict(self.fake_instance, host='new-host'))
|
||||
db.instance_get_by_uuid(ctxt, fake_uuid, columns_to_join=[]
|
||||
).AndReturn(dict(self.fake_instance,
|
||||
host='orig-host'))
|
||||
db.instance_get_by_uuid(ctxt, fake_uuid, columns_to_join=[]
|
||||
).AndReturn(dict(self.fake_instance,
|
||||
host='new-host'))
|
||||
self.mox.ReplayAll()
|
||||
inst = instance.Instance.get_by_uuid(ctxt, fake_uuid)
|
||||
self.assertEqual(inst.host, 'orig-host')
|
||||
|
@ -177,7 +192,8 @@ class _TestInstanceObject(object):
|
|||
self.mox.StubOutWithMock(db, 'instance_get_by_uuid')
|
||||
self.mox.StubOutWithMock(db, 'instance_update_and_get_original')
|
||||
self.mox.StubOutWithMock(db, 'instance_info_cache_update')
|
||||
db.instance_get_by_uuid(ctxt, fake_uuid, []).AndReturn(fake_inst)
|
||||
db.instance_get_by_uuid(ctxt, fake_uuid, columns_to_join=[]
|
||||
).AndReturn(fake_inst)
|
||||
db.instance_update_and_get_original(
|
||||
ctxt, fake_uuid, {'user_data': 'foo'}).AndReturn(
|
||||
(fake_inst, dict(fake_inst, host='newhost')))
|
||||
|
@ -192,7 +208,8 @@ class _TestInstanceObject(object):
|
|||
fake_inst = dict(self.fake_instance, id=123, deleted=123)
|
||||
fake_uuid = fake_inst['uuid']
|
||||
self.mox.StubOutWithMock(db, 'instance_get_by_uuid')
|
||||
db.instance_get_by_uuid(ctxt, fake_uuid, []).AndReturn(fake_inst)
|
||||
db.instance_get_by_uuid(ctxt, fake_uuid, columns_to_join=[]
|
||||
).AndReturn(fake_inst)
|
||||
self.mox.ReplayAll()
|
||||
inst = instance.Instance.get_by_uuid(ctxt, fake_uuid)
|
||||
# NOTE(danms): Make sure it's actually a bool
|
||||
|
@ -207,7 +224,8 @@ class _TestInstanceObject(object):
|
|||
self.mox.StubOutWithMock(db, 'instance_get_by_uuid')
|
||||
self.mox.StubOutWithMock(db, 'instance_update_and_get_original')
|
||||
self.mox.StubOutWithMock(db, 'instance_info_cache_update')
|
||||
db.instance_get_by_uuid(ctxt, fake_uuid, []).AndReturn(fake_inst)
|
||||
db.instance_get_by_uuid(ctxt, fake_uuid, columns_to_join=[]
|
||||
).AndReturn(fake_inst)
|
||||
db.instance_info_cache_update(ctxt, fake_uuid,
|
||||
{'network_info': 'bar'})
|
||||
self.mox.ReplayAll()
|
||||
|
@ -235,7 +253,8 @@ class _TestInstanceObject(object):
|
|||
self.mox.StubOutWithMock(db, 'instance_get_by_uuid')
|
||||
self.mox.StubOutWithMock(db, 'instance_update_and_get_original')
|
||||
self.mox.StubOutWithMock(db, 'security_group_update')
|
||||
db.instance_get_by_uuid(ctxt, fake_uuid, []).AndReturn(fake_inst)
|
||||
db.instance_get_by_uuid(ctxt, fake_uuid, columns_to_join=[]
|
||||
).AndReturn(fake_inst)
|
||||
db.security_group_update(ctxt, 1, {'description': 'changed'}
|
||||
).AndReturn(fake_inst['security_groups'][0])
|
||||
self.mox.ReplayAll()
|
||||
|
@ -260,8 +279,8 @@ class _TestInstanceObject(object):
|
|||
for x in test_instance_fault.fake_faults['fake-uuid']]
|
||||
self.mox.StubOutWithMock(db, 'instance_get_by_uuid')
|
||||
self.mox.StubOutWithMock(db, 'instance_fault_get_by_instance_uuids')
|
||||
db.instance_get_by_uuid(ctxt, fake_uuid, []).AndReturn(
|
||||
self.fake_instance)
|
||||
db.instance_get_by_uuid(ctxt, fake_uuid, columns_to_join=[]
|
||||
).AndReturn(self.fake_instance)
|
||||
db.instance_fault_get_by_instance_uuids(ctxt, [fake_uuid]).AndReturn(
|
||||
{fake_uuid: fake_faults})
|
||||
self.mox.ReplayAll()
|
||||
|
|
Loading…
Reference in New Issue