From 204e83aeed81947a25360c9ab4d1b4425a9c0c11 Mon Sep 17 00:00:00 2001 From: James Cammarata Date: Thu, 7 Jul 2016 13:41:35 -0500 Subject: [PATCH] Ensure async wrapper and status return consistent fields --- lib/ansible/modules/utilities/logic/async_status.py | 8 ++++++-- lib/ansible/modules/utilities/logic/async_wrapper.py | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/ansible/modules/utilities/logic/async_status.py b/lib/ansible/modules/utilities/logic/async_status.py index a35f3c0cc2e..7c3d458f1fe 100644 --- a/lib/ansible/modules/utilities/logic/async_status.py +++ b/lib/ansible/modules/utilities/logic/async_status.py @@ -76,11 +76,13 @@ def main(): # no remote kill mode currently exists, but probably should # consider log_path + ".pid" file and also unlink that above - data = file(log_path).read() + data = None try: + data = file(log_path).read() + import q; q(data) data = json.loads(data) except Exception: - if data == '': + if not data: # file not written yet? That means it is running module.exit_json(results_file=log_path, ansible_job_id=jid, started=1, finished=0) else: @@ -90,6 +92,8 @@ def main(): if not 'started' in data: data['finished'] = 1 data['ansible_job_id'] = jid + elif 'finished' not in data: + data['finished'] = 0 # Fix error: TypeError: exit_json() keywords must be strings data = dict([(str(k), v) for k, v in data.iteritems()]) diff --git a/lib/ansible/modules/utilities/logic/async_wrapper.py b/lib/ansible/modules/utilities/logic/async_wrapper.py index a99c4f070a2..3a9b44d4cd0 100644 --- a/lib/ansible/modules/utilities/logic/async_wrapper.py +++ b/lib/ansible/modules/utilities/logic/async_wrapper.py @@ -74,7 +74,7 @@ def _run_module(wrapped_cmd, jid, job_path): tmp_job_path = job_path + ".tmp" jobfile = open(tmp_job_path, "w") - jobfile.write(json.dumps({ "started" : 1, "ansible_job_id" : jid })) + jobfile.write(json.dumps({ "started" : 1, "finished" : 0, "ansible_job_id" : jid })) jobfile.close() os.rename(tmp_job_path, job_path) jobfile = open(tmp_job_path, "w") @@ -161,7 +161,7 @@ if __name__ == '__main__': # this probably could be done with some IPC later. Modules should always read # the argsfile at the very first start of their execution anyway notice("Return async_wrapper task started.") - print(json.dumps({ "started" : 1, "ansible_job_id" : jid, "results_file" : job_path })) + print(json.dumps({ "started" : 1, "finished" : 0, "ansible_job_id" : jid, "results_file" : job_path })) sys.stdout.flush() time.sleep(1) sys.exit(0)