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
This commit is contained in:
@@ -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')
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user