diff options
| author | Senhua Huang <senhuang@cisco.com> | 2013-05-23 07:17:38 -0700 |
|---|---|---|
| committer | Senhua Huang <senhuang@cisco.com> | 2013-05-26 02:13:40 -0700 |
| commit | 40c6c1a9d29608a04f2062e63dcc395acbb0dffd (patch) | |
| tree | 4a8c1e35ffca8669371f20da52d2f952e4d4bef0 | |
| parent | f166ac3768e6b446d69f483d34348c0d070ca4c4 (diff) | |
Deprecate compute_api_class option in the config
Add a function "get_compute_api_class_name" within nova.compute
that returns nova.compute.cells_api.ComputeCellsAPI if cell is
enabled and this cell is an API cell, and returns compute.api.API
otherwise.
Add an option "cell_type" to the config in group "cells".
Use the default value of "cell_type" (None) for legacy configuration.
Change-Id: I32f5ccf789c657b563c165bfa8244e819b1a79a6
Fixes: bug #1049249
| -rw-r--r-- | nova/cells/opts.py | 3 | ||||
| -rw-r--r-- | nova/compute/__init__.py | 54 | ||||
| -rw-r--r-- | nova/tests/compute/test_compute.py | 24 | ||||
| -rw-r--r-- | nova/tests/compute/test_host_api.py | 3 |
4 files changed, 78 insertions, 6 deletions
diff --git a/nova/cells/opts.py b/nova/cells/opts.py index 203f98687..4e3d75de4 100644 --- a/nova/cells/opts.py +++ b/nova/cells/opts.py @@ -43,6 +43,9 @@ cells_opts = [ default=10.0, help='Percentage of cell capacity to hold in reserve. ' 'Affects both memory and disk utilization'), + cfg.StrOpt('cell_type', + default=None, + help='Type of cell: api or compute'), ] cfg.CONF.register_opts(cells_opts, group='cells') diff --git a/nova/compute/__init__.py b/nova/compute/__init__.py index baa957ca8..5d17dcef9 100644 --- a/nova/compute/__init__.py +++ b/nova/compute/__init__.py @@ -20,21 +20,65 @@ import oslo.config.cfg # Importing full names to not pollute the namespace and cause possible # collisions with use of 'from nova.compute import <foo>' elsewhere. +import nova.exception import nova.openstack.common.importutils +from nova.openstack.common import log as logging + +LOG = logging.getLogger(__name__) _compute_opts = [ oslo.config.cfg.StrOpt('compute_api_class', default='nova.compute.api.API', help='The full class name of the ' - 'compute API class to use'), + 'compute API class to use (deprecated)'), ] - oslo.config.cfg.CONF.register_opts(_compute_opts) +oslo.config.cfg.CONF.import_opt('enable', + 'nova.cells.opts', + group='cells') + +oslo.config.cfg.CONF.import_opt('cell_type', + 'nova.cells.opts', + group='cells') + +COMPUTE_API = 'nova.compute.api.API' +COMPUTE_CELL_API = 'nova.compute.cells_api.ComputeCellsAPI' + + +def get_compute_api_class_name(): + """ + Returns the name of compute API class. + """ + if not oslo.config.cfg.CONF.cells.enable: + return COMPUTE_API + + cell_type = oslo.config.cfg.CONF.cells.cell_type + # If cell is enabled and cell_type option is not set (and thus get the + # default value None), use the deprecated compute_api_class option. + if cell_type is None: + compute_api_class_name = oslo.config.cfg.CONF.compute_api_class + LOG.deprecated(_("The compute_api_class is now deprecated and " + "will be removed in next release. Please set the" + " cell_type option to api or compute")) + # If cell is enabled and this cell is an API-cell, use cell specific + # computeAPI. + elif cell_type == 'api': + compute_api_class_name = COMPUTE_CELL_API + # If cell is enabled and this cell is a COMPUTE-cell, use normal + # computeAPI. + elif cell_type == 'compute': + compute_api_class_name = COMPUTE_API + # Otherwise, raise exception for invalid cell_type + else: + msg = _("cell_type must be configured as 'api' or 'compute'") + raise nova.exception.InvalidInput(reason=msg) + return compute_api_class_name + def API(*args, **kwargs): importutils = nova.openstack.common.importutils - class_name = oslo.config.cfg.CONF.compute_api_class + class_name = get_compute_api_class_name() return importutils.import_object(class_name, *args, **kwargs) @@ -44,7 +88,7 @@ def HostAPI(*args, **kwargs): api """ importutils = nova.openstack.common.importutils - compute_api_class_name = oslo.config.cfg.CONF.compute_api_class + compute_api_class_name = get_compute_api_class_name() compute_api_class = importutils.import_class(compute_api_class_name) class_name = compute_api_class.__module__ + ".HostAPI" return importutils.import_object(class_name, *args, **kwargs) @@ -56,7 +100,7 @@ def InstanceActionAPI(*args, **kwargs): configured compute api. """ importutils = nova.openstack.common.importutils - compute_api_class_name = oslo.config.cfg.CONF.compute_api_class + compute_api_class_name = get_compute_api_class_name() compute_api_class = importutils.import_class(compute_api_class_name) class_name = compute_api_class.__module__ + ".InstanceActionAPI" return importutils.import_object(class_name, *args, **kwargs) diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py index 491ecf544..26ddc497a 100644 --- a/nova/tests/compute/test_compute.py +++ b/nova/tests/compute/test_compute.py @@ -9276,3 +9276,27 @@ class CheckRequestedImageTestCase(test.TestCase): self.compute_api._check_requested_image(self.context, image['id'], image, self.instance_type) + + +class ComputeAPIClassNameTestCase(test.TestCase): + def setUp(self): + super(ComputeAPIClassNameTestCase, self).setUp() + + def test_default_compute_api_class_name(self): + result = compute.get_compute_api_class_name() + self.assertEqual('nova.compute.api.API', result) + + def test_cell_compute_api_class_name(self): + self.flags(enable=True, group='cells') + self.flags(cell_type='api', group='cells') + result = compute.get_compute_api_class_name() + self.assertEqual('nova.compute.cells_api.ComputeCellsAPI', result) + self.flags(cell_type='compute', group='cells') + result = compute.get_compute_api_class_name() + self.assertEqual('nova.compute.api.API', result) + + def test_illegal_cell_compute_api_class_name(self): + self.flags(enable=True, group='cells') + self.flags(cell_type='fake_cell_type', group='cells') + self.assertRaises(exception.InvalidInput, + compute.get_compute_api_class_name) diff --git a/nova/tests/compute/test_host_api.py b/nova/tests/compute/test_host_api.py index 6a87205ae..f9ef3894d 100644 --- a/nova/tests/compute/test_host_api.py +++ b/nova/tests/compute/test_host_api.py @@ -252,7 +252,8 @@ class ComputeHostAPITestCase(test.TestCase): class ComputeHostAPICellsTestCase(ComputeHostAPITestCase): def setUp(self): - self.flags(compute_api_class='nova.compute.cells_api.ComputeCellsAPI') + self.flags(enable=True, group='cells') + self.flags(cell_type='api', group='cells') super(ComputeHostAPICellsTestCase, self).setUp() def _mock_rpc_call(self, expected_message, result=None): |
