Merge "Add cells get_cell_type() method"

This commit is contained in:
Jenkins 2013-07-04 02:21:03 +00:00 committed by Gerrit Code Review
commit a8079b11e0
3 changed files with 71 additions and 60 deletions
nova
cells
compute
tests/compute

@ -20,6 +20,10 @@ Global cells config options
from oslo.config import cfg
from nova import exception
from nova.openstack.common import log as logging
cells_opts = [
cfg.BoolOpt('enable',
default=False,
@ -53,4 +57,41 @@ cells_opts = [
'treated as a mute.'),
]
cfg.CONF.register_opts(cells_opts, group='cells')
CONF = cfg.CONF
CONF.register_opts(cells_opts, group='cells')
# NOTE(comstud): Remove 'compute_api_class' after Havana and set a reasonable
# default for 'cell_type'.
_compute_opts = [
cfg.StrOpt('compute_api_class',
default='nova.compute.api.API',
help='The full class name of the '
'compute API class to use (deprecated)'),
]
CONF.register_opts(_compute_opts)
LOG = logging.getLogger(__name__)
def get_cell_type():
"""Return the cell type, 'api', 'compute', or None (if cells is disabled).
This call really exists just to support the deprecated compute_api_class
config option. Otherwise, one could just access CONF.cells.enable and
CONF.cells.cell_type directly.
"""
if not CONF.cells.enable:
return
cell_type = CONF.cells.cell_type
if cell_type:
if cell_type == 'api' or cell_type == 'compute':
return cell_type
msg = _("cell_type must be configured as 'api' or 'compute'")
raise exception.InvalidInput(reason=msg)
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 CONF.compute_api_class == 'nova.compute.cells_api.ComputeCellsAPI':
return 'api'
return 'compute'

@ -16,69 +16,27 @@
# License for the specific language governing permissions and limitations
# under the License.
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.cells.opts
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 (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_TO_CLS_NAME = {'api': 'nova.compute.cells_api.ComputeCellsAPI',
'compute': 'nova.compute.api.API',
None: 'nova.compute.api.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 _get_compute_api_class_name():
"""Returns the name of compute API class."""
cell_type = nova.cells.opts.get_cell_type()
return CELL_TYPE_TO_CLS_NAME[cell_type]
def API(*args, **kwargs):
importutils = nova.openstack.common.importutils
class_name = get_compute_api_class_name()
class_name = _get_compute_api_class_name()
return importutils.import_object(class_name, *args, **kwargs)
@ -88,7 +46,7 @@ def HostAPI(*args, **kwargs):
api
"""
importutils = nova.openstack.common.importutils
compute_api_class_name = get_compute_api_class_name()
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)
@ -100,7 +58,7 @@ def InstanceActionAPI(*args, **kwargs):
configured compute api.
"""
importutils = nova.openstack.common.importutils
compute_api_class_name = get_compute_api_class_name()
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)

@ -9118,20 +9118,32 @@ class ComputeAPIClassNameTestCase(test.TestCase):
super(ComputeAPIClassNameTestCase, self).setUp()
def test_default_compute_api_class_name(self):
result = compute.get_compute_api_class_name()
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()
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()
result = compute._get_compute_api_class_name()
self.assertEqual('nova.compute.api.API', result)
def test_cell_compute_api_class_name_deprecated(self):
self.flags(enable=True, group='cells')
self.flags(cell_type='', group='cells')
api_cls_name = 'nova.compute.cells_api.ComputeCellsAPI'
self.flags(compute_api_class=api_cls_name)
result = compute._get_compute_api_class_name()
self.assertEqual('nova.compute.cells_api.ComputeCellsAPI', result)
api_cls_name = 'nova.compute.api.API'
self.flags(compute_api_class=api_cls_name)
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)
compute._get_compute_api_class_name)