From 11da85f93857b97d24bf38e0d5c11d581222e0cd Mon Sep 17 00:00:00 2001 From: Will Thames Date: Thu, 3 Aug 2017 14:49:56 +1000 Subject: [PATCH] timer callback plugin: handle timezone changes better A playbook that does `timezone name=Australia/Brisbane` on a host previously in UTC will appear to take 10 hours. Improve the seconds handling for playbooks that take longer than one hour. Improve the hours handling for playbooks that take longer than one day. TZ change before: ``` Playbook run took 0 days, 10 hours, 0 minutes, 36055 seconds ``` After: ``` Playbook run took 0 days, 0 hours, 0 minutes, 55 seconds ``` Sleep for 100s more than one hour before: ``` Playbook run took 0 days, 1 hours, 1 minutes, 3641 seconds ``` After: ``` Playbook run took 0 days, 1 hours, 1 minutes, 41 seconds ``` --- lib/ansible/plugins/callback/timer.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/ansible/plugins/callback/timer.py b/lib/ansible/plugins/callback/timer.py index 0c9829aea2b..ce444badf7e 100644 --- a/lib/ansible/plugins/callback/timer.py +++ b/lib/ansible/plugins/callback/timer.py @@ -20,17 +20,17 @@ class CallbackModule(CallbackBase): super(CallbackModule, self).__init__() - self.start_time = datetime.now() + self.start_time = datetime.utcnow() def days_hours_minutes_seconds(self, runtime): minutes = (runtime.seconds // 60) % 60 - r_seconds = runtime.seconds - (minutes * 60) + r_seconds = runtime.seconds % 60 return runtime.days, runtime.seconds // 3600, minutes, r_seconds def playbook_on_stats(self, stats): self.v2_playbook_on_stats(stats) def v2_playbook_on_stats(self, stats): - end_time = datetime.now() + end_time = datetime.utcnow() runtime = end_time - self.start_time self._display.display("Playbook run took %s days, %s hours, %s minutes, %s seconds" % (self.days_hours_minutes_seconds(runtime)))