Add cells get_cell_type() method
This moves/consolidates some the deprecated config code for cells into nova/cells/opts.py and creates a new method to determine the cell_type that we can use in other places where logic needs to differ depending on 'compute' or 'api' cells. This also may happen to fix bug 1197091. I'm unable to reproduce that bug in tests, unfortunately. We'll need this soon for some object related conversion. Related to blueprint unified-object-model Change-Id: Id291759fabb71656be18fb1eb405fcd5983f84ae
This commit is contained in:
parent
446def5c39
commit
9f902c7e17
|
@ -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…
Reference in New Issue