Remove cyclic import between rpcapi and objects.base
There was a cyclic import between conductor.rpcapi and objects.base, this was initally fixed by doing an import at runtime. This patch fixes the import cycle for good. Change-Id: I8ee8c47652de75430312f77ddee08adc7a237d2b Closes-Bug: #1623074
This commit is contained in:
parent
991d3a9f2b
commit
57d4e0ce3d
@ -23,6 +23,7 @@ from oslo_config import cfg
|
||||
|
||||
from ironic.common import service as ironic_service
|
||||
from ironic.objects import base
|
||||
from ironic.objects import indirection
|
||||
|
||||
CONF = cfg.CONF
|
||||
|
||||
@ -32,7 +33,8 @@ def main():
|
||||
ironic_service.prepare_service(sys.argv)
|
||||
|
||||
# Enable object backporting via the conductor
|
||||
base.IronicObject.indirection_api = base.IronicObjectIndirectionAPI()
|
||||
base.IronicObject.indirection_api = (
|
||||
indirection.IronicObjectIndirectionAPI())
|
||||
|
||||
# Build and start the WSGI app
|
||||
launcher = ironic_service.process_launcher()
|
||||
|
@ -90,36 +90,6 @@ class IronicObject(object_base.VersionedObject):
|
||||
return obj
|
||||
|
||||
|
||||
class IronicObjectIndirectionAPI(object_base.VersionedObjectIndirectionAPI):
|
||||
def __init__(self):
|
||||
super(IronicObjectIndirectionAPI, self).__init__()
|
||||
# FIXME(xek): importing here due to a cyclical import error
|
||||
from ironic.conductor import rpcapi as conductor_api
|
||||
self._conductor = conductor_api.ConductorAPI()
|
||||
|
||||
def object_action(self, context, objinst, objmethod, args, kwargs):
|
||||
return self._conductor.object_action(context, objinst, objmethod,
|
||||
args, kwargs)
|
||||
|
||||
def object_class_action(self, context, objname, objmethod, objver,
|
||||
args, kwargs):
|
||||
# NOTE(xek): This method is implemented for compatibility with
|
||||
# oslo.versionedobjects 0.10.0 and older. It will be replaced by
|
||||
# object_class_action_versions.
|
||||
versions = object_base.obj_tree_get_versions(objname)
|
||||
return self.object_class_action_versions(
|
||||
context, objname, objmethod, versions, args, kwargs)
|
||||
|
||||
def object_class_action_versions(self, context, objname, objmethod,
|
||||
object_versions, args, kwargs):
|
||||
return self._conductor.object_class_action_versions(
|
||||
context, objname, objmethod, object_versions, args, kwargs)
|
||||
|
||||
def object_backport_versions(self, context, objinst, object_versions):
|
||||
return self._conductor.object_backport_versions(context, objinst,
|
||||
object_versions)
|
||||
|
||||
|
||||
class IronicObjectSerializer(object_base.VersionedObjectSerializer):
|
||||
# Base class to use for object hydration
|
||||
OBJ_BASE_CLASS = IronicObject
|
||||
|
43
ironic/objects/indirection.py
Normal file
43
ironic/objects/indirection.py
Normal file
@ -0,0 +1,43 @@
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from oslo_versionedobjects import base as object_base
|
||||
|
||||
from ironic.conductor import rpcapi as conductor_api
|
||||
|
||||
|
||||
class IronicObjectIndirectionAPI(object_base.VersionedObjectIndirectionAPI):
|
||||
def __init__(self):
|
||||
super(IronicObjectIndirectionAPI, self).__init__()
|
||||
self._conductor = conductor_api.ConductorAPI()
|
||||
|
||||
def object_action(self, context, objinst, objmethod, args, kwargs):
|
||||
return self._conductor.object_action(context, objinst, objmethod,
|
||||
args, kwargs)
|
||||
|
||||
def object_class_action(self, context, objname, objmethod, objver,
|
||||
args, kwargs):
|
||||
# NOTE(xek): This method is implemented for compatibility with
|
||||
# oslo.versionedobjects 0.10.0 and older. It will be replaced by
|
||||
# object_class_action_versions.
|
||||
versions = object_base.obj_tree_get_versions(objname)
|
||||
return self.object_class_action_versions(
|
||||
context, objname, objmethod, versions, args, kwargs)
|
||||
|
||||
def object_class_action_versions(self, context, objname, objmethod,
|
||||
object_versions, args, kwargs):
|
||||
return self._conductor.object_class_action_versions(
|
||||
context, objname, objmethod, object_versions, args, kwargs)
|
||||
|
||||
def object_backport_versions(self, context, objinst, object_versions):
|
||||
return self._conductor.object_backport_versions(context, objinst,
|
||||
object_versions)
|
Loading…
Reference in New Issue
Block a user