diff --git a/zun/common/config.py b/zun/common/config.py index 6cd6b0df6..c98abadfe 100644 --- a/zun/common/config.py +++ b/zun/common/config.py @@ -28,6 +28,7 @@ def parse_args(argv, default_config_files=None): project='zun', version=version.version_info.release_string(), default_config_files=default_config_files) + rpc.init(zun.conf.CONF) def set_config_defaults(): diff --git a/zun/common/rpc.py b/zun/common/rpc.py index 142daea06..26ecb66b4 100644 --- a/zun/common/rpc.py +++ b/zun/common/rpc.py @@ -14,11 +14,13 @@ # under the License. __all__ = [ + 'init', 'set_defaults', 'add_extra_exmods', 'clear_extra_exmods', 'get_allowed_exmods', 'RequestContextSerializer', + 'get_client', ] import oslo_messaging as messaging @@ -30,12 +32,20 @@ from zun.common import exception profiler = importutils.try_import("osprofiler.profiler") +TRANSPORT = None ALLOWED_EXMODS = [ exception.__name__, ] EXTRA_EXMODS = [] +def init(conf): + global TRANSPORT + exmods = get_allowed_exmods() + TRANSPORT = messaging.get_rpc_transport( + conf, allowed_remote_exmods=exmods) + + def set_defaults(control_exchange): messaging.set_transport_defaults(control_exchange) @@ -103,3 +113,11 @@ class ProfilerRequestContextSerializer(RequestContextSerializer): return super(ProfilerRequestContextSerializer, self).deserialize_context(context) + + +def get_client(target, serializer=None, timeout=None): + assert TRANSPORT is not None + return messaging.RPCClient(TRANSPORT, + target, + serializer=serializer, + timeout=timeout) diff --git a/zun/common/rpc_service.py b/zun/common/rpc_service.py index 157ffb49d..b21c6ac8e 100644 --- a/zun/common/rpc_service.py +++ b/zun/common/rpc_service.py @@ -87,20 +87,16 @@ class Service(service.Service): class API(object): - def __init__(self, transport=None, context=None, topic=None, server=None, + def __init__(self, context=None, topic=None, server=None, timeout=None): serializer = _init_serializer() - if transport is None: - exmods = rpc.get_allowed_exmods() - transport = messaging.get_rpc_transport( - CONF, allowed_remote_exmods=exmods) self._context = context if topic is None: topic = '' target = messaging.Target(topic=topic, server=server) - self._client = messaging.RPCClient(transport, target, - serializer=serializer, - timeout=timeout) + self._client = rpc.get_client(target, + serializer=serializer, + timeout=timeout) def _call(self, server, method, *args, **kwargs): cctxt = self._client.prepare(server=server) diff --git a/zun/compute/rpcapi.py b/zun/compute/rpcapi.py index bd3563652..b838d457b 100644 --- a/zun/compute/rpcapi.py +++ b/zun/compute/rpcapi.py @@ -47,13 +47,13 @@ class API(rpc_service.API): * 1.1 - Add image endpoints. """ - def __init__(self, transport=None, context=None, topic=None): + def __init__(self, context=None, topic=None): if topic is None: zun.conf.CONF.import_opt( 'topic', 'zun.conf.compute', group='compute') super(API, self).__init__( - transport, context, topic=zun.conf.CONF.compute.topic) + context, topic=zun.conf.CONF.compute.topic) def container_create(self, context, host, container, limits, requested_networks, requested_volumes, run,