Move list-az from engine manager to api
There's no need to issue a rpc request to manager to list az from DB, we can just do it from api side, also this saves a rpc call. Change-Id: Ie10db1f0df3a255d4bdbfb334936a9c03e3e900c
This commit is contained in:
parent
587a4cbea2
commit
83dfea98c9
@ -266,7 +266,7 @@ class API(object):
|
||||
|
||||
# check availability zone
|
||||
if availability_zone:
|
||||
azs = self.engine_rpcapi.list_availability_zones(context)
|
||||
azs = self.list_availability_zones(context)
|
||||
if availability_zone not in azs['availability_zones']:
|
||||
raise exception.AZNotFound
|
||||
|
||||
@ -330,8 +330,17 @@ class API(object):
|
||||
self.engine_rpcapi.rebuild_instance(context, instance)
|
||||
|
||||
def list_availability_zones(self, context):
|
||||
"""Get a list of availability zones."""
|
||||
return self.engine_rpcapi.list_availability_zones(context)
|
||||
"""Get availability zone list."""
|
||||
compute_nodes = objects.ComputeNodeList.get_all_available(context)
|
||||
|
||||
azs = set()
|
||||
for node in compute_nodes:
|
||||
az = node.availability_zone \
|
||||
or CONF.engine.default_availability_zone
|
||||
if az is not None:
|
||||
azs.add(az)
|
||||
|
||||
return {'availability_zones': list(azs)}
|
||||
|
||||
def lock(self, context, instance):
|
||||
"""Lock the given instance."""
|
||||
|
@ -534,19 +534,6 @@ class EngineManager(base_manager.BaseEngineManager):
|
||||
utils.process_event(fsm, instance, event='done')
|
||||
LOG.info('Instance was successfully rebuilt', instance=instance)
|
||||
|
||||
def list_availability_zones(self, context):
|
||||
"""Get availability zone list."""
|
||||
compute_nodes = objects.ComputeNodeList.get_all_available(context)
|
||||
|
||||
azs = set()
|
||||
for node in compute_nodes:
|
||||
az = node.availability_zone \
|
||||
or CONF.engine.default_availability_zone
|
||||
if az is not None:
|
||||
azs.add(az)
|
||||
|
||||
return {'availability_zones': list(azs)}
|
||||
|
||||
def get_serial_console(self, context, instance):
|
||||
node_console_info = self.driver.get_serial_console_by_instance(
|
||||
context, instance)
|
||||
|
@ -74,11 +74,6 @@ class EngineAPI(object):
|
||||
cctxt = self.client.prepare(topic=self.topic, server=CONF.host)
|
||||
return cctxt.cast(context, 'rebuild_instance', instance=instance)
|
||||
|
||||
def list_availability_zones(self, context):
|
||||
"""Signal to engine service to get availability zone list."""
|
||||
cctxt = self.client.prepare(topic=self.topic, server=CONF.host)
|
||||
return cctxt.call(context, 'list_availability_zones')
|
||||
|
||||
def get_serial_console(self, context, instance):
|
||||
cctxt = self.client.prepare(topic=self.topic, server=CONF.host)
|
||||
return cctxt.call(context, 'get_serial_console',
|
||||
|
@ -87,8 +87,6 @@ class TestInstances(v1_test.APITestV1):
|
||||
self.network_api = mock.Mock()
|
||||
self.useFixture(mockpatch.Patch('mogan.network.api.API',
|
||||
return_value=self.network_api))
|
||||
self.rpc_api.list_availability_zones.return_value = {
|
||||
'availability_zones': ['test_zone']}
|
||||
self.image_api.get.return_value = _get_fake_image()
|
||||
self.network_api.validate_networks.return_value = 100
|
||||
super(TestInstances, self).setUp()
|
||||
@ -129,7 +127,6 @@ class TestInstances(v1_test.APITestV1):
|
||||
"description": "just test instance " + str(i),
|
||||
'instance_type_uuid': 'ff28b5a2-73e5-431c-b4b7-1b96b74bca7b',
|
||||
'image_uuid': 'b8f82429-3a13-4ffe-9398-4d1abdc256a8',
|
||||
'availability_zone': 'test_zone',
|
||||
'networks': [
|
||||
{'net_id': 'c1940655-8b8e-4370-b8f9-03ba1daeca31'}],
|
||||
'extra': {'fake_key': 'fake_value'}
|
||||
@ -148,7 +145,7 @@ class TestInstances(v1_test.APITestV1):
|
||||
self.assertEqual(self.INSTANCE_TYPE_UUID, resp['instance_type_uuid'])
|
||||
self.assertEqual('b8f82429-3a13-4ffe-9398-4d1abdc256a8',
|
||||
resp['image_uuid'])
|
||||
self.assertEqual('test_zone', resp['availability_zone'])
|
||||
self.assertEqual(None, resp['availability_zone'])
|
||||
self.assertEqual({}, resp['network_info'])
|
||||
self.assertEqual({'fake_key': 'fake_value'}, resp['extra'])
|
||||
self.assertIn('links', resp)
|
||||
@ -170,7 +167,7 @@ class TestInstances(v1_test.APITestV1):
|
||||
self.assertEqual(self.INSTANCE_TYPE_UUID, resp['instance_type_uuid'])
|
||||
self.assertEqual('b8f82429-3a13-4ffe-9398-4d1abdc256a8',
|
||||
resp['image_uuid'])
|
||||
self.assertEqual('test_zone', resp['availability_zone'])
|
||||
self.assertEqual(None, resp['availability_zone'])
|
||||
self.assertEqual({}, resp['network_info'])
|
||||
self.assertEqual({'fake_key': 'fake_value'}, resp['extra'])
|
||||
self.assertIn('links', resp)
|
||||
|
@ -17,6 +17,7 @@
|
||||
|
||||
import mock
|
||||
from oslo_context import context
|
||||
from oslo_utils import uuidutils
|
||||
|
||||
from mogan.common import exception
|
||||
from mogan.common import states
|
||||
@ -25,6 +26,7 @@ from mogan.engine import rpcapi as engine_rpcapi
|
||||
from mogan import objects
|
||||
from mogan.tests.unit.db import base
|
||||
from mogan.tests.unit.db import utils as db_utils
|
||||
from mogan.tests.unit.objects import utils as obj_utils
|
||||
|
||||
|
||||
class ComputeAPIUnitTest(base.DbTestCase):
|
||||
@ -90,7 +92,7 @@ class ComputeAPIUnitTest(base.DbTestCase):
|
||||
@mock.patch.object(engine_rpcapi.EngineAPI, 'create_instance')
|
||||
@mock.patch('mogan.engine.api.API._get_image')
|
||||
@mock.patch('mogan.engine.api.API._validate_and_build_base_options')
|
||||
@mock.patch.object(engine_rpcapi.EngineAPI, 'list_availability_zones')
|
||||
@mock.patch('mogan.engine.api.API.list_availability_zones')
|
||||
def test_create(self, mock_list_az, mock_validate, mock_get_image,
|
||||
mock_create):
|
||||
instance_type = self._create_instance_type()
|
||||
@ -140,7 +142,7 @@ class ComputeAPIUnitTest(base.DbTestCase):
|
||||
after_in_use = res.get('instances').in_use
|
||||
self.assertEqual(before_in_use + 2, after_in_use)
|
||||
|
||||
@mock.patch.object(engine_rpcapi.EngineAPI, 'list_availability_zones')
|
||||
@mock.patch('mogan.engine.api.API.list_availability_zones')
|
||||
def test_create_with_invalid_az(self, mock_list_az):
|
||||
instance_type = mock.MagicMock()
|
||||
mock_list_az.return_value = {'availability_zones': ['invalid_az']}
|
||||
@ -161,7 +163,7 @@ class ComputeAPIUnitTest(base.DbTestCase):
|
||||
|
||||
@mock.patch('mogan.engine.api.API._get_image')
|
||||
@mock.patch('mogan.engine.api.API._validate_and_build_base_options')
|
||||
@mock.patch.object(engine_rpcapi.EngineAPI, 'list_availability_zones')
|
||||
@mock.patch('mogan.engine.api.API.list_availability_zones')
|
||||
def test_create_over_quota_limit(self, mock_list_az, mock_validate,
|
||||
mock_get_image):
|
||||
instance_type = self._create_instance_type()
|
||||
@ -307,3 +309,17 @@ class ComputeAPIUnitTest(base.DbTestCase):
|
||||
fake_instance_obj = self._create_fake_instance_obj(fake_instance)
|
||||
self.engine_api.rebuild(self.context, fake_instance_obj)
|
||||
self.assertTrue(mock_rebuild.called)
|
||||
|
||||
def test_list_availability_zone(self):
|
||||
uuid1 = uuidutils.generate_uuid()
|
||||
uuid2 = uuidutils.generate_uuid()
|
||||
obj_utils.create_test_compute_node(
|
||||
self.context, availability_zone='az1')
|
||||
obj_utils.create_test_compute_node(
|
||||
self.context, node_uuid=uuid1, availability_zone='az2')
|
||||
obj_utils.create_test_compute_node(
|
||||
self.context, node_uuid=uuid2, availability_zone='az1')
|
||||
|
||||
azs = self.engine_api.list_availability_zones(self.context)
|
||||
|
||||
self.assertItemsEqual(['az1', 'az2'], azs['availability_zones'])
|
||||
|
@ -125,22 +125,6 @@ class ManageInstanceTestCase(mgr_utils.ServiceSetUpMixin,
|
||||
ironic_states.POWER_ON)
|
||||
get_power_mock.assert_called_once_with(self.context, instance.uuid)
|
||||
|
||||
def test_list_availability_zone(self):
|
||||
uuid1 = uuidutils.generate_uuid()
|
||||
uuid2 = uuidutils.generate_uuid()
|
||||
obj_utils.create_test_compute_node(
|
||||
self.context, availability_zone='az1')
|
||||
obj_utils.create_test_compute_node(
|
||||
self.context, node_uuid=uuid1, availability_zone='az2')
|
||||
obj_utils.create_test_compute_node(
|
||||
self.context, node_uuid=uuid2, availability_zone='az1')
|
||||
|
||||
self._start_service()
|
||||
azs = self.service.list_availability_zones(self.context)
|
||||
self._stop_service()
|
||||
|
||||
self.assertItemsEqual(['az1', 'az2'], azs['availability_zones'])
|
||||
|
||||
@mock.patch.object(ironic.IronicClientWrapper, 'call')
|
||||
def test_get_serial_console(self, mock_ironic_call):
|
||||
fake_node = mock.MagicMock()
|
||||
|
@ -128,8 +128,3 @@ class RPCAPITestCase(base.DbTestCase):
|
||||
'cast',
|
||||
version='1.0',
|
||||
instance=self.fake_instance_obj)
|
||||
|
||||
def test_list_availability_zones(self):
|
||||
self._test_rpcapi('list_availability_zones',
|
||||
'call',
|
||||
version='1.0')
|
||||
|
Loading…
x
Reference in New Issue
Block a user