Added request_id and global_request_id to basic notifications
Change-Id: I667e82d3239ced3908a6bad7402f521b8e3ea564 Related-Bug: #1801095
This commit is contained in:
parent
30445574fc
commit
51a68525c6
@ -145,7 +145,8 @@ class Audit(object):
|
||||
operation,
|
||||
resource_type,
|
||||
resource_id,
|
||||
actor_dict,
|
||||
initiator=initiator,
|
||||
actor_dict=actor_dict,
|
||||
public=public)
|
||||
|
||||
if CONF.notification_format == 'cadf' and public:
|
||||
@ -444,8 +445,8 @@ def _create_cadf_payload(operation, resource_type, resource_id,
|
||||
target, event_type, reason=reason, **audit_kwargs)
|
||||
|
||||
|
||||
def _send_notification(operation, resource_type, resource_id, actor_dict=None,
|
||||
public=True):
|
||||
def _send_notification(operation, resource_type, resource_id, initiator=None,
|
||||
actor_dict=None, public=True):
|
||||
"""Send notification to inform observers about the affected resource.
|
||||
|
||||
This method doesn't raise an exception when sending the notification fails.
|
||||
@ -453,6 +454,7 @@ def _send_notification(operation, resource_type, resource_id, actor_dict=None,
|
||||
:param operation: operation being performed (created, updated, or deleted)
|
||||
:param resource_type: type of resource being operated on
|
||||
:param resource_id: ID of resource being operated on
|
||||
:param initiator: representation of the user that created the request
|
||||
:param actor_dict: a dictionary containing the actor's ID and type
|
||||
:param public: if True (default), the event will be sent
|
||||
to the notifier API.
|
||||
@ -466,6 +468,12 @@ def _send_notification(operation, resource_type, resource_id, actor_dict=None,
|
||||
payload['actor_type'] = actor_dict['type']
|
||||
payload['actor_operation'] = actor_dict['actor_operation']
|
||||
|
||||
if initiator:
|
||||
payload['request_id'] = initiator.request_id
|
||||
global_request_id = getattr(initiator, 'global_request_id', None)
|
||||
if global_request_id:
|
||||
payload['global_request_id'] = global_request_id
|
||||
|
||||
notify_event_callbacks(SERVICE, resource_type, operation, payload)
|
||||
|
||||
# Only send this notification if the 'basic' format is used, otherwise
|
||||
|
@ -244,12 +244,13 @@ class BaseNotificationTest(test_v3.RestfulTestCase):
|
||||
self._notifications = []
|
||||
self._audits = []
|
||||
|
||||
def fake_notify(operation, resource_type, resource_id,
|
||||
def fake_notify(operation, resource_type, resource_id, initiator=None,
|
||||
actor_dict=None, public=True):
|
||||
note = {
|
||||
'resource_id': resource_id,
|
||||
'operation': operation,
|
||||
'resource_type': resource_type,
|
||||
'initiator': initiator,
|
||||
'send_notification_called': True,
|
||||
'public': public}
|
||||
if actor_dict:
|
||||
@ -364,7 +365,8 @@ class BaseNotificationTest(test_v3.RestfulTestCase):
|
||||
'send_notification_called': True,
|
||||
'public': public}
|
||||
for note in self._notifications:
|
||||
if expected == note:
|
||||
# compare only expected fields
|
||||
if all(note.get(k) == v for k, v in expected.items()):
|
||||
break
|
||||
else:
|
||||
self.fail("Notification not sent.")
|
||||
@ -717,6 +719,30 @@ class NotificationsForEntities(BaseNotificationTest):
|
||||
actor_id=user_ref['id'], actor_type='user',
|
||||
actor_operation='removed')
|
||||
|
||||
def test_initiator_request_id(self):
|
||||
ref = unit.new_domain_ref()
|
||||
self.post('/domains', body={'domain': ref})
|
||||
note = self._notifications[-1]
|
||||
initiator = note['initiator']
|
||||
self.assertIsNotNone(initiator.request_id)
|
||||
|
||||
def test_initiator_global_request_id(self):
|
||||
global_request_id = 'req-%s' % uuid.uuid4()
|
||||
ref = unit.new_domain_ref()
|
||||
self.post('/domains', body={'domain': ref},
|
||||
headers={'X-OpenStack-Request-Id': global_request_id})
|
||||
note = self._notifications[-1]
|
||||
initiator = note['initiator']
|
||||
self.assertEqual(
|
||||
initiator.global_request_id, global_request_id)
|
||||
|
||||
def test_initiator_global_request_id_not_set(self):
|
||||
ref = unit.new_domain_ref()
|
||||
self.post('/domains', body={'domain': ref})
|
||||
note = self._notifications[-1]
|
||||
initiator = note['initiator']
|
||||
self.assertFalse(hasattr(initiator, 'global_request_id'))
|
||||
|
||||
|
||||
class CADFNotificationsForPCIDSSEvents(BaseNotificationTest):
|
||||
|
||||
|
@ -2,4 +2,5 @@
|
||||
features:
|
||||
- >
|
||||
[`bug 1801095 <https://bugs.launchpad.net/keystone/+bug/1801095>`_]
|
||||
Request ID and global request ID have been added to CADF notifications.
|
||||
Request ID and global request ID have been added to both basic and CADF
|
||||
notifications.
|
||||
|
Loading…
Reference in New Issue
Block a user