Merge "Add cells get_cell_type() method"
This commit is contained in:
commit
a8079b11e0
nova
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user