diff options
Diffstat (limited to 'conductor/conductor/messaging.py')
-rw-r--r-- | conductor/conductor/messaging.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/conductor/conductor/messaging.py b/conductor/conductor/messaging.py new file mode 100644 index 0000000..84a34a9 --- /dev/null +++ b/conductor/conductor/messaging.py @@ -0,0 +1,73 @@ +# +# ------------------------------------------------------------------------- +# Copyright (c) 2015-2017 AT&T Intellectual Property +# +# 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_config import cfg + +from conductor.common import music +from conductor.common.music.messaging import component + +DEFAULT_URL = "__default__" +TRANSPORTS = {} + +CONF = cfg.CONF + +# Pull in messaging server opts. We use them here. +MESSAGING_SERVER_OPTS = component.MESSAGING_SERVER_OPTS +CONF.register_opts(MESSAGING_SERVER_OPTS, group='messaging_server') + + +def setup(): + """Messaging setup, if any""" + # oslo_messaging.set_transport_defaults('conductor') + pass + + +# TODO(jdandrea): Remove Music-specific aspects (keyspace -> namespace?) +# TODO(jdandrea): Make Music an oslo rpc backend (difficulty level: high?) +def get_transport(conf, url=None, optional=False, cache=True): + """Initialise the Music messaging layer.""" + global TRANSPORTS + cache_key = url or DEFAULT_URL + transport = TRANSPORTS.get(cache_key) + + if not transport or not cache: + try: + # "Somebody set up us the API." ;) + # Yes, we know an API is not a transport. Cognitive dissonance FTW! + # TODO(jdandrea): try/except to catch problems + keyspace = conf.messaging_server.keyspace + transport = music.api.API() + transport.keyspace_create(keyspace=keyspace) + except Exception: + if not optional or url: + # NOTE(sileht): oslo_messaging is configured but unloadable + # so reraise the exception + raise + return None + else: + if cache: + TRANSPORTS[cache_key] = transport + return transport + + +def cleanup(): + """Cleanup the Music messaging layer.""" + global TRANSPORTS + for url in TRANSPORTS: + del TRANSPORTS[url] |