Using Instance object instead of db call

It would be better to use the Instance object for all
the instance related db calls.

Blueprint: kilo-objects
Change-Id: I673727513b66e8a6bdbbe0c037c32b92710e2cc9
This commit is contained in:
Mike Durnosvistov
2015-01-23 11:26:51 +02:00
parent 71f06fc505
commit c56ffc6ffe
2 changed files with 15 additions and 29 deletions

View File

@@ -16,11 +16,11 @@
"""Handles ConsoleProxy API requests."""
from oslo_config import cfg
from oslo_utils import uuidutils
from nova.compute import rpcapi as compute_rpcapi
from nova.console import rpcapi as console_rpcapi
from nova.db import base
from nova import objects
CONF = cfg.CONF
CONF.import_opt('console_topic', 'nova.console.rpcapi')
@@ -51,21 +51,14 @@ class API(base.Base):
# They can just do an index later to fetch
# console info. I am not sure which is better
# here.
instance = self._get_instance(context, instance_uuid)
topic = self._get_console_topic(context, instance['host'])
instance = objects.Instance.get_by_uuid(context, instance_uuid)
topic = self._get_console_topic(context, instance.host)
server = None
if '.' in topic:
topic, server = topic.split('.', 1)
rpcapi = console_rpcapi.ConsoleAPI(topic=topic, server=server)
rpcapi.add_console(context, instance['id'])
rpcapi.add_console(context, instance.id)
def _get_console_topic(self, context, instance_host):
rpcapi = compute_rpcapi.ComputeAPI()
return rpcapi.get_console_topic(context, instance_host)
def _get_instance(self, context, instance_uuid):
if uuidutils.is_uuid_like(instance_uuid):
instance = self.db.instance_get_by_uuid(context, instance_uuid)
else:
instance = self.db.instance_get(context, instance_uuid)
return instance

View File

@@ -16,6 +16,7 @@
"""Tests For Console proxy."""
import mock
from oslo_config import cfg
from oslo_utils import importutils
@@ -25,6 +26,7 @@ from nova.console import rpcapi as console_rpcapi
from nova import context
from nova import db
from nova import exception
from nova import objects
from nova import test
CONF = cfg.CONF
@@ -146,10 +148,6 @@ class ConsoleAPITestCase(test.TestCase):
self.stubs.Set(db, 'console_get_all_by_instance',
_fake_db_console_get_all_by_instance)
def _fake_instance_get_by_uuid(_ctxt, _instance_uuid):
return self.fake_instance
self.stubs.Set(db, 'instance_get_by_uuid', _fake_instance_get_by_uuid)
def test_get_consoles(self):
console = self.console_api.get_consoles(self.context, self.fake_uuid)
self.assertEqual(console, [self.fake_console])
@@ -169,18 +167,13 @@ class ConsoleAPITestCase(test.TestCase):
self.console_api.delete_console(self.context, self.fake_uuid,
'fake_id')
def test_create_console(self):
self.mox.StubOutWithMock(compute_rpcapi.ComputeAPI,
'get_console_topic')
compute_rpcapi.ComputeAPI.get_console_topic(
self.context, 'fake_host').AndReturn('compute.fake_host')
self.mox.StubOutClassWithMocks(console_rpcapi, 'ConsoleAPI')
console_api_mock = console_rpcapi.ConsoleAPI(
topic='compute', server='fake_host')
console_api_mock.add_console(self.context,
self.fake_instance['id'])
self.mox.ReplayAll()
@mock.patch.object(compute_rpcapi.ComputeAPI, 'get_console_topic',
return_value='compute.fake_host')
@mock.patch.object(objects.Instance, 'get_by_uuid')
def test_create_console(self, mock_get_instance_by_uuid,
mock_get_console_topic):
mock_get_instance_by_uuid.return_value = objects.Instance(
**self.fake_instance)
self.console_api.create_console(self.context, self.fake_uuid)
mock_get_console_topic.assert_called_once_with(self.context,
'fake_host')