Add support for xz compression (for dump and import) in mysql_db module

This commit is contained in:
fdupoux 2015-05-12 22:28:18 +01:00
parent ed6b95a0bb
commit 51ffbda9a1

View file

@ -79,7 +79,7 @@ options:
target:
description:
- Location, on the remote host, of the dump file to read from or write to. Uncompressed SQL
files (C(.sql)) as well as bzip2 (C(.bz2)) and gzip (C(.gz)) compressed files are supported.
files (C(.sql)) as well as bzip2 (C(.bz2)), gzip (C(.gz)) and xz compressed files are supported.
required: false
notes:
- Requires the MySQLdb Python package on the remote host. For Ubuntu, this
@ -146,6 +146,8 @@ def db_dump(module, host, user, password, db_name, target, all_databases, port,
cmd = cmd + ' | gzip > ' + pipes.quote(target)
elif os.path.splitext(target)[-1] == '.bz2':
cmd = cmd + ' | bzip2 > ' + pipes.quote(target)
elif os.path.splitext(target)[-1] == '.xz':
cmd = cmd + ' | xz > ' + pipes.quote(target)
else:
cmd += " > %s" % pipes.quote(target)
rc, stdout, stderr = module.run_command(cmd, use_unsafe_shell=True)
@ -197,6 +199,23 @@ def db_import(module, host, user, password, db_name, target, all_databases, port
finally:
#bzip2 file back up
rc, stdout, stderr = module.run_command('%s %s' % (bzip2_path, os.path.splitext(target)[0]))
elif os.path.splitext(target)[-1] == '.xz':
xz_path = module.get_bin_path('xz')
if not xz_path:
module.fail_json(msg="xz command not found")
#xz -d file (uncompress)
rc, stdout, stderr = module.run_command('%s -d %s' % (xz_path, target))
if rc != 0:
return rc, stdout, stderr
#Import sql
cmd += " < %s" % pipes.quote(os.path.splitext(target)[0])
try:
rc, stdout, stderr = module.run_command(cmd, use_unsafe_shell=True)
if rc != 0:
return rc, stdout, stderr
finally:
#xz file back up
rc, stdout, stderr = module.run_command('%s %s' % (xz_path, os.path.splitext(target)[0]))
else:
cmd += " < %s" % pipes.quote(target)
rc, stdout, stderr = module.run_command(cmd, use_unsafe_shell=True)