From bb73819c43bfb0069c5459924e26014ef0a4fe35 Mon Sep 17 00:00:00 2001 From: Jonathan Mainguy Date: Sun, 30 Mar 2014 13:39:00 -0400 Subject: [PATCH] mysql_db module now correctly fails on import if bz2 or gz fails. --- library/database/mysql_db | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/library/database/mysql_db b/library/database/mysql_db index c9fd5b4e08..aa852ea78c 100644 --- a/library/database/mysql_db +++ b/library/database/mysql_db @@ -148,12 +148,42 @@ def db_import(module, host, user, password, db_name, target, port, socket=None): cmd += " --host=%s --port=%s" % (pipes.quote(host), pipes.quote(port)) cmd += " -D %s" % pipes.quote(db_name) if os.path.splitext(target)[-1] == '.gz': - cmd = 'gunzip < ' + pipes.quote(target) + ' | ' + cmd + gunzip_path = module.get_bin_path('gunzip') + if gunzip_path: + rc, stdout, stderr = module.run_command('%s %s' % (gunzip_path, target)) + if rc != 0: + return rc, stdout, stderr + cmd += " < %s" % pipes.quote(target[0:-3]) + rc, stdout, stderr = module.run_command(cmd, use_unsafe_shell=True) + if rc != 0: + return rc, stdout, stderr + gzip_path = module.get_bin_path('gzip') + if gzip_path: + rc, stdout, stderr = module.run_command('%s %s' % (gzip_path, target[0:-3])) + else: + module.fail_json(msg="gzip command not found") + else: + module.fail_json(msg="gunzip command not found") elif os.path.splitext(target)[-1] == '.bz2': - cmd = 'bunzip2 < ' + pipes.quote(target) + ' | ' + cmd + bunzip2_path = module.get_bin_path('bunzip2') + if bunzip2_path: + rc, stdout, stderr = module.run_command('%s %s' % (bunzip2_path, target)) + if rc != 0: + return rc, stdout, stderr + cmd += " < %s" % pipes.quote(target[0:-4]) + rc, stdout, stderr = module.run_command(cmd, use_unsafe_shell=True) + if rc != 0: + return rc, stdout, stderr + bzip2_path = module.get_bin_path('bzip2') + if bzip2_path: + rc, stdout, stderr = module.run_command('%s %s' % (bzip2_path, target[0:-4])) + else: + module.fail_json(msg="bzip2 command not found") + else: + module.fail_json(msg="bunzip2 command not found") else: cmd += " < %s" % pipes.quote(target) - rc, stdout, stderr = module.run_command(cmd, use_unsafe_shell=True) + rc, stdout, stderr = module.run_command(cmd, use_unsafe_shell=True) return rc, stdout, stderr def db_create(cursor, db, encoding, collation):