diff --git a/keystonemiddleware/audit/__init__.py b/keystonemiddleware/audit/__init__.py index ea8f292b..331a8942 100644 --- a/keystonemiddleware/audit/__init__.py +++ b/keystonemiddleware/audit/__init__.py @@ -42,6 +42,13 @@ _LOG = None AUDIT_MIDDLEWARE_GROUP = 'audit_middleware_notifications' _AUDIT_OPTS = [ + cfg.BoolOpt('use_oslo_messaging', + default=True, + help='Indicate whether to use oslo_messaging as the notifier. ' + 'If set to False, the local logger will be used as the ' + 'notifier. If set to True, the oslo_messaging package ' + 'must also be present. Otherwise, the local will be used ' + 'instead.'), cfg.StrOpt('driver', help='The Driver to handle sending notifications. Possible ' 'values are messaging, messagingv2, routing, log, test, ' diff --git a/keystonemiddleware/audit/_notifier.py b/keystonemiddleware/audit/_notifier.py index 8d77eaa5..63234c0d 100644 --- a/keystonemiddleware/audit/_notifier.py +++ b/keystonemiddleware/audit/_notifier.py @@ -41,7 +41,7 @@ class _MessagingNotifier(object): def create_notifier(conf, log): - if oslo_messaging: + if oslo_messaging and conf.get('use_oslo_messaging'): transport = oslo_messaging.get_notification_transport( conf.oslo_conf_obj, url=conf.get('transport_url')) diff --git a/keystonemiddleware/tests/unit/audit/test_audit_oslo_messaging.py b/keystonemiddleware/tests/unit/audit/test_audit_oslo_messaging.py index 570972d9..6dcd837e 100644 --- a/keystonemiddleware/tests/unit/audit/test_audit_oslo_messaging.py +++ b/keystonemiddleware/tests/unit/audit/test_audit_oslo_messaging.py @@ -12,6 +12,7 @@ import mock +from keystonemiddleware import audit from keystonemiddleware.tests.unit.audit import base @@ -80,3 +81,13 @@ class AuditNotifierConfigTest(base.BaseAuditMiddlewareTest): self.assertTrue(m.called) # make sure first call kwarg 'url' is same as provided transport_url self.assertEqual(transport_url, m.call_args_list[0][1]['url']) + + def test_do_not_use_oslo_messaging(self): + self.cfg.config(use_oslo_messaging=False, + group='audit_middleware_notifications') + audit_middleware = self.create_simple_middleware() + + # make sure it is using a local notifier instead of oslo_messaging + self.assertTrue( + isinstance(audit_middleware._notifier, + audit._notifier._LogNotifier)) diff --git a/releasenotes/notes/bug-1695038-2cbedcabf8ecc057.yaml b/releasenotes/notes/bug-1695038-2cbedcabf8ecc057.yaml new file mode 100644 index 00000000..340aa640 --- /dev/null +++ b/releasenotes/notes/bug-1695038-2cbedcabf8ecc057.yaml @@ -0,0 +1,13 @@ +--- +features: + - > + [`bug 1695038 `_] + The use_oslo_messaging configuration option is added for services such as + Swift, which need the audit middleware to use the local logger instead of + the oslo.messaging notifier regardless of whether the oslo.messaging package + is present or not. + Leave this option set to its default True value to keep the previous behavior + unchanged - the audit middleware will use the oslo.messaging notifier if the + oslo.messaging package is present, and the local logger otherwise. + Services that rely on the local logger for audit notifications must set this + option to False.