Merge "notifier: simply notifier_strategy compat support"
This commit is contained in:
commit
ca6eb80ad4
@ -26,7 +26,7 @@ import glance.openstack.common.log as logging
|
||||
from glance.openstack.common import timeutils
|
||||
|
||||
notifier_opts = [
|
||||
cfg.StrOpt('notifier_strategy', default='default',
|
||||
cfg.StrOpt('notifier_strategy',
|
||||
help=_('Notifications can be sent when images are create, '
|
||||
'updated or deleted. There are three methods of sending '
|
||||
'notifications, logging (via the log_file directive), '
|
||||
@ -61,57 +61,32 @@ _ALIASES = {
|
||||
class Notifier(object):
|
||||
"""Uses a notification strategy to send out messages about events."""
|
||||
|
||||
def __init__(self, strategy=None):
|
||||
def __init__(self):
|
||||
|
||||
_driver = None
|
||||
_strategy = strategy
|
||||
driver = None
|
||||
transport_url = None
|
||||
publisher_id = CONF.default_publisher_id
|
||||
|
||||
if CONF.notifier_strategy != 'default':
|
||||
if CONF.notifier_strategy:
|
||||
msg = _("notifier_strategy was deprecated in "
|
||||
"favor of `notification_driver`")
|
||||
LOG.warn(msg)
|
||||
|
||||
strategy = CONF.notifier_strategy
|
||||
|
||||
# NOTE(flaper87): Use this to keep backwards
|
||||
# compatibility. We'll try to get an oslo.messaging
|
||||
# driver from the specified strategy.
|
||||
_strategy = strategy or CONF.notifier_strategy
|
||||
_driver = _STRATEGY_ALIASES.get(_strategy)
|
||||
driver = _STRATEGY_ALIASES.get(strategy)
|
||||
if driver == 'messaging':
|
||||
transport_url = strategy + ':///'
|
||||
|
||||
publisher_id = CONF.default_publisher_id
|
||||
|
||||
try:
|
||||
# NOTE(flaper87): Assume the user has configured
|
||||
# the transport url.
|
||||
self._transport = messaging.get_transport(CONF,
|
||||
aliases=_ALIASES)
|
||||
except messaging.DriverLoadFailure:
|
||||
# NOTE(flaper87): Catch driver load failures and re-raise
|
||||
# them *just* if the `transport_url` option was set. This
|
||||
# step is intended to keep backwards compatibility and avoid
|
||||
# weird behaviors (like exceptions on missing dependencies)
|
||||
# when the old notifier options are used.
|
||||
if CONF.transport_url is not None:
|
||||
with excutils.save_and_reraise_exception():
|
||||
LOG.exception(_('Error loading the notifier'))
|
||||
|
||||
# NOTE(flaper87): This needs to be checked
|
||||
# here because the `get_transport` call
|
||||
# registers `transport_url` into ConfigOpts.
|
||||
if not CONF.transport_url:
|
||||
# NOTE(flaper87): The next 3 lines help
|
||||
# with the migration to oslo.messaging.
|
||||
# Without them, gate tests won't know
|
||||
# what driver should be loaded.
|
||||
# Once this patch lands, devstack will be
|
||||
# updated and then these lines will be removed.
|
||||
url = None
|
||||
if _strategy in ['rabbit', 'qpid']:
|
||||
url = _strategy + '://'
|
||||
self._transport = messaging.get_transport(CONF, url,
|
||||
aliases=_ALIASES)
|
||||
self._transport = messaging.get_transport(CONF,
|
||||
url=transport_url,
|
||||
aliases=_ALIASES)
|
||||
|
||||
self._notifier = messaging.Notifier(self._transport,
|
||||
driver=_driver,
|
||||
driver=driver,
|
||||
publisher_id=publisher_id)
|
||||
|
||||
def warn(self, event_type, payload):
|
||||
|
@ -17,6 +17,8 @@
|
||||
import datetime
|
||||
|
||||
import mock
|
||||
from oslo.config import cfg
|
||||
from oslo import messaging
|
||||
import webob
|
||||
|
||||
from glance.common import exception
|
||||
@ -94,42 +96,50 @@ class TaskRepoStub(object):
|
||||
|
||||
class TestNotifier(utils.BaseTestCase):
|
||||
|
||||
def test_load_rabbit(self):
|
||||
nfier = notifier.Notifier('rabbit')
|
||||
self.assertIsNotNone(nfier._transport)
|
||||
|
||||
def test_load_qpid(self):
|
||||
nfier = notifier.Notifier('qpid')
|
||||
self.assertIsNotNone(nfier._transport)
|
||||
self.assertEqual(str(nfier._transport._driver._url),
|
||||
'qpid:///')
|
||||
|
||||
def test_notifier_strategy(self):
|
||||
self.config(notifier_strategy='qpid')
|
||||
@mock.patch.object(messaging, 'Notifier')
|
||||
@mock.patch.object(messaging, 'get_transport')
|
||||
def _test_load_strategy(self,
|
||||
mock_get_transport, mock_notifier,
|
||||
strategy, url, driver):
|
||||
if strategy is not None:
|
||||
self.config(notifier_strategy=strategy)
|
||||
nfier = notifier.Notifier()
|
||||
mock_get_transport.assert_called_with(cfg.CONF, url=url,
|
||||
aliases=notifier._ALIASES)
|
||||
self.assertIsNotNone(nfier._transport)
|
||||
self.assertEqual(str(nfier._transport._driver._url),
|
||||
'qpid:///')
|
||||
mock_notifier.assert_called_with(nfier._transport, driver=driver,
|
||||
publisher_id='image.localhost')
|
||||
self.assertIsNotNone(nfier._notifier)
|
||||
|
||||
def test_transport_url(self):
|
||||
transport_url = "qpid://superhost:5672/"
|
||||
self.config(transport_url=transport_url)
|
||||
notify = notifier.Notifier()
|
||||
self.assertEqual(str(notify._transport._driver._url),
|
||||
transport_url)
|
||||
def test_notifier_strategy_default(self):
|
||||
self._test_load_strategy(strategy='default',
|
||||
url=None,
|
||||
driver='noop')
|
||||
|
||||
def test_notification_driver_option(self):
|
||||
self.config(rpc_backend='qpid')
|
||||
self.config(notification_driver='messaging')
|
||||
self.config(notifier_strategy='rabbit')
|
||||
notify = notifier.Notifier()
|
||||
self.assertEqual(str(notify._transport._driver._url),
|
||||
'rabbit:///')
|
||||
def test_notifier_strategy_noop(self):
|
||||
self._test_load_strategy(strategy='noop',
|
||||
url=None,
|
||||
driver='noop')
|
||||
|
||||
self.config(notifier_strategy='default')
|
||||
notify = notifier.Notifier()
|
||||
self.assertEqual(str(notify._transport._driver._url),
|
||||
'qpid:///')
|
||||
def test_notifier_strategy_rabbit(self):
|
||||
self._test_load_strategy(strategy='rabbit',
|
||||
url='rabbit:///',
|
||||
driver='messaging')
|
||||
|
||||
def test_notifier_strategy_qpid(self):
|
||||
self._test_load_strategy(strategy='qpid',
|
||||
url='qpid:///',
|
||||
driver='messaging')
|
||||
|
||||
def test_notifier_strategy_logging(self):
|
||||
self._test_load_strategy(strategy='logging',
|
||||
url=None,
|
||||
driver='log')
|
||||
|
||||
def test_notifier_strategy_none(self):
|
||||
self._test_load_strategy(strategy=None,
|
||||
url=None,
|
||||
driver=None)
|
||||
|
||||
|
||||
class TestImageNotifications(utils.BaseTestCase):
|
||||
|
Loading…
x
Reference in New Issue
Block a user