diff --git a/ansible_runner/display_callback/callback/awx_display.py b/ansible_runner/display_callback/callback/awx_display.py index 79a56f9cd..ce8b84251 100644 --- a/ansible_runner/display_callback/callback/awx_display.py +++ b/ansible_runner/display_callback/callback/awx_display.py @@ -67,7 +67,7 @@ def current_time(): - return datetime.datetime.utcnow() + return datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc) # use a custom JSON serializer so we can properly handle !unsafe and !vault @@ -198,7 +198,7 @@ def get_begin_dict(self): event_dict['project_update_id'] = int(os.getenv('PROJECT_UPDATE_ID', '0')) event_dict['pid'] = event_data.get('pid', os.getpid()) event_dict['uuid'] = event_data.get('uuid', str(uuid.uuid4())) - event_dict['created'] = event_data.get('created', datetime.datetime.utcnow().isoformat()) + event_dict['created'] = event_data.get('created', current_time().isoformat()) if not event_data.get('parent_uuid', None): for key in ('task_uuid', 'play_uuid', 'playbook_uuid'): parent_uuid = event_data.get(key, None) diff --git a/ansible_runner/runner.py b/ansible_runner/runner.py index df5e01a9a..fa1db097f 100644 --- a/ansible_runner/runner.py +++ b/ansible_runner/runner.py @@ -80,7 +80,7 @@ def event_callback(self, event_data): # prefer 'created' from partial data, but verbose events set time here if 'created' not in event_data: - event_data['created'] = datetime.datetime.utcnow().isoformat() + event_data['created'] = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc).isoformat() if self.event_handler is not None: should_write = self.event_handler(event_data) diff --git a/test/unit/test_runner.py b/test/unit/test_runner.py index ed42e5879..e35455367 100644 --- a/test/unit/test_runner.py +++ b/test/unit/test_runner.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- import codecs +import datetime import os import json @@ -80,6 +81,7 @@ def test_verbose_event_created_time(rc): assert exitcode == 0 for event in runner.events: assert 'created' in event, event + assert datetime.datetime.fromisoformat(event['created']).tzinfo == datetime.timezone.utc @pytest.mark.parametrize('value', ['abc123', six.u('Iñtërnâtiônàlizætiøn')])