diff options
| author | Russell Bryant <rbryant@redhat.com> | 2012-12-13 12:53:43 -0500 |
|---|---|---|
| committer | Russell Bryant <rbryant@redhat.com> | 2013-01-03 14:02:09 -0500 |
| commit | adffcd58fb09dafb0c4e128797b4a61a59087f9a (patch) | |
| tree | afcbabee9561afb0fbc56ef2dafe6288c107ca01 /openstack/common/notifier | |
| parent | fdc74c07d63ff897f42405b6dde0ffa46d6e26c3 (diff) | |
| download | oslo-adffcd58fb09dafb0c4e128797b4a61a59087f9a.tar.gz oslo-adffcd58fb09dafb0c4e128797b4a61a59087f9a.tar.xz oslo-adffcd58fb09dafb0c4e128797b4a61a59087f9a.zip | |
Optionally add message envelope to notifications.
When message envelopes were added for rpc messages, notifications were
explicitly left out. This was due to the fact that notifications are
consumed outside of OpenStack. However, notification consumers will
likely want to eventually start taking advantage of some of the features
that the envelope is a prerequisite for, such as message signing.
This patch adds a new notification driver that produces message based
notifications including the message envelope.
Related to blueprint version-rpc-messages.
Change-Id: Iaa8b437e6b4f64053f4b02bf486516f60bb020e9
Diffstat (limited to 'openstack/common/notifier')
| -rw-r--r-- | openstack/common/notifier/rpc_notifier2.py | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/openstack/common/notifier/rpc_notifier2.py b/openstack/common/notifier/rpc_notifier2.py new file mode 100644 index 0000000..b7696fd --- /dev/null +++ b/openstack/common/notifier/rpc_notifier2.py @@ -0,0 +1,51 @@ +# Copyright 2011 OpenStack LLC. +# All Rights Reserved. +# +# 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. + +'''messaging based notification driver, with message envelopes''' + +from openstack.common import cfg +from openstack.common import context as req_context +from openstack.common.gettextutils import _ +from openstack.common import log as logging +from openstack.common import rpc + +LOG = logging.getLogger(__name__) + +notification_topic_opt = cfg.ListOpt( + 'topics', default=['notifications', ], + help='AMQP topic(s) used for openstack notifications') + +opt_group = cfg.OptGroup(name='rpc_notifier2', + title='Options for rpc_notifier2') + +CONF = cfg.CONF +CONF.register_group(opt_group) +CONF.register_opt(notification_topic_opt, opt_group) + + +def notify(context, message): + """Sends a notification via RPC""" + if not context: + context = req_context.get_admin_context() + priority = message.get('priority', + CONF.default_notification_level) + priority = priority.lower() + for topic in CONF.rpc_notifier2.topics: + topic = '%s.%s' % (topic, priority) + try: + rpc.notify(context, topic, message, envelope=True) + except Exception: + LOG.exception(_("Could not send notification to %(topic)s. " + "Payload=%(message)s"), locals()) |
