mirror of
https://github.com/ansible-collections/community.mysql.git
synced 2025-08-26 16:01:45 -07:00
Add option to activate the fix on systems with bash
This commit is contained in:
parent
36bbc64def
commit
3fe6f9b73d
2 changed files with 26 additions and 10 deletions
|
@ -156,6 +156,14 @@ options:
|
||||||
- Can be useful, for example, when I(state=import) and a dump file contains relative paths.
|
- Can be useful, for example, when I(state=import) and a dump file contains relative paths.
|
||||||
type: path
|
type: path
|
||||||
version_added: '3.4.0'
|
version_added: '3.4.0'
|
||||||
|
pipefail:
|
||||||
|
description:
|
||||||
|
- Use bash instead of sh and add -o pipefail to catch errors from the
|
||||||
|
mysql_dump command when compression is used. The default is false to
|
||||||
|
prevent issue on system without bash. The default may change in a future release
|
||||||
|
type: bool
|
||||||
|
default: no
|
||||||
|
version_added: '3.3.1'
|
||||||
|
|
||||||
seealso:
|
seealso:
|
||||||
- module: community.mysql.mysql_info
|
- module: community.mysql.mysql_info
|
||||||
|
@ -355,7 +363,7 @@ def db_dump(module, host, user, password, db_name, target, all_databases, port,
|
||||||
single_transaction=None, quick=None, ignore_tables=None, hex_blob=None,
|
single_transaction=None, quick=None, ignore_tables=None, hex_blob=None,
|
||||||
encoding=None, force=False, master_data=0, skip_lock_tables=False,
|
encoding=None, force=False, master_data=0, skip_lock_tables=False,
|
||||||
dump_extra_args=None, unsafe_password=False, restrict_config_file=False,
|
dump_extra_args=None, unsafe_password=False, restrict_config_file=False,
|
||||||
check_implicit_admin=False):
|
check_implicit_admin=False, pipefail=False):
|
||||||
cmd = module.get_bin_path('mysqldump', True)
|
cmd = module.get_bin_path('mysqldump', True)
|
||||||
# If defined, mysqldump demands --defaults-extra-file be the first option
|
# If defined, mysqldump demands --defaults-extra-file be the first option
|
||||||
if config_file:
|
if config_file:
|
||||||
|
@ -422,13 +430,20 @@ def db_dump(module, host, user, password, db_name, target, all_databases, port,
|
||||||
elif os.path.splitext(target)[-1] == '.xz':
|
elif os.path.splitext(target)[-1] == '.xz':
|
||||||
path = module.get_bin_path('xz', True)
|
path = module.get_bin_path('xz', True)
|
||||||
|
|
||||||
if path:
|
if pipefail:
|
||||||
cmd = 'set -o pipefail && %s | %s > %s' % (cmd, path, shlex_quote(target))
|
cmd = 'set -o pipefail && %s | %s > %s' % (cmd, path, shlex_quote(target))
|
||||||
|
elif path:
|
||||||
|
cmd = '%s | %s > %s' % (cmd, path, shlex_quote(target))
|
||||||
else:
|
else:
|
||||||
cmd += " > %s" % shlex_quote(target)
|
cmd += " > %s" % shlex_quote(target)
|
||||||
|
|
||||||
executed_commands.append(cmd)
|
executed_commands.append(cmd)
|
||||||
|
|
||||||
|
if pipefail:
|
||||||
rc, stdout, stderr = module.run_command(cmd, use_unsafe_shell=True, executable='bash')
|
rc, stdout, stderr = module.run_command(cmd, use_unsafe_shell=True, executable='bash')
|
||||||
|
else:
|
||||||
|
rc, stdout, stderr = module.run_command(cmd, use_unsafe_shell=True)
|
||||||
|
|
||||||
return rc, stdout, stderr
|
return rc, stdout, stderr
|
||||||
|
|
||||||
|
|
||||||
|
@ -569,6 +584,7 @@ def main():
|
||||||
check_implicit_admin=dict(type='bool', default=False),
|
check_implicit_admin=dict(type='bool', default=False),
|
||||||
config_overrides_defaults=dict(type='bool', default=False),
|
config_overrides_defaults=dict(type='bool', default=False),
|
||||||
chdir=dict(type='path'),
|
chdir=dict(type='path'),
|
||||||
|
pipefail=dict(type='bool', default=False),
|
||||||
)
|
)
|
||||||
|
|
||||||
module = AnsibleModule(
|
module = AnsibleModule(
|
||||||
|
@ -618,6 +634,7 @@ def main():
|
||||||
check_implicit_admin = module.params['check_implicit_admin']
|
check_implicit_admin = module.params['check_implicit_admin']
|
||||||
config_overrides_defaults = module.params['config_overrides_defaults']
|
config_overrides_defaults = module.params['config_overrides_defaults']
|
||||||
chdir = module.params['chdir']
|
chdir = module.params['chdir']
|
||||||
|
pipefail = module.params['pipefail']
|
||||||
|
|
||||||
if chdir:
|
if chdir:
|
||||||
try:
|
try:
|
||||||
|
@ -704,7 +721,7 @@ def main():
|
||||||
ssl_ca, single_transaction, quick, ignore_tables,
|
ssl_ca, single_transaction, quick, ignore_tables,
|
||||||
hex_blob, encoding, force, master_data, skip_lock_tables,
|
hex_blob, encoding, force, master_data, skip_lock_tables,
|
||||||
dump_extra_args, unsafe_login_password, restrict_config_file,
|
dump_extra_args, unsafe_login_password, restrict_config_file,
|
||||||
check_implicit_admin)
|
check_implicit_admin, pipefail)
|
||||||
if rc != 0:
|
if rc != 0:
|
||||||
module.fail_json(msg="%s" % stderr)
|
module.fail_json(msg="%s" % stderr)
|
||||||
module.exit_json(changed=True, db=db_name, db_list=db, msg=stdout,
|
module.exit_json(changed=True, db=db_name, db_list=db, msg=stdout,
|
||||||
|
|
|
@ -97,11 +97,11 @@
|
||||||
that:
|
that:
|
||||||
- full_dump_without_t1 is failed
|
- full_dump_without_t1 is failed
|
||||||
- full_dump_without_t1.msg is search(
|
- full_dump_without_t1.msg is search(
|
||||||
"View 'db2.v1' references invalid table(s)")
|
'references invalid table')
|
||||||
- full_dump_without_t1_gz_without_fix is changed
|
- full_dump_without_t1_gz_without_fix is changed
|
||||||
- full_dump_without_t1_gz_with_fix is failed
|
- full_dump_without_t1_gz_with_fix is failed
|
||||||
- full_dump_without_t1_gz_with_fix.msg is search(
|
- full_dump_without_t1_gz_with_fix.msg is search(
|
||||||
"View 'db2.v1' references invalid table(s)")
|
'references invalid table')
|
||||||
|
|
||||||
- name: Dumps errors | Distinct dump after drop t1 without compression
|
- name: Dumps errors | Distinct dump after drop t1 without compression
|
||||||
community.mysql.mysql_db:
|
community.mysql.mysql_db:
|
||||||
|
@ -128,17 +128,16 @@
|
||||||
register: dump_db2_without_t1_gz_with_fix
|
register: dump_db2_without_t1_gz_with_fix
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
- name: Dumps errors | Check full dump
|
- name: Dumps errors | Check distinct dump
|
||||||
ansible.builtin.assert:
|
ansible.builtin.assert:
|
||||||
that:
|
that:
|
||||||
- dump_db2_without_t1 is failed
|
- dump_db2_without_t1 is failed
|
||||||
- dump_db2_without_t1.msg is search(
|
- dump_db2_without_t1.msg is search(
|
||||||
"View 'db2.v1' references invalid table(s)")
|
'references invalid table')
|
||||||
- dump_db2_without_t1_gz_without_fix is changed
|
- dump_db2_without_t1_gz_without_fix is changed
|
||||||
- dump_db2_without_t1_gz_with_fix is failed
|
- dump_db2_without_t1_gz_with_fix is failed
|
||||||
- dump_db2_without_t1_gz_with_fix.msg is search(
|
- dump_db2_without_t1_gz_with_fix.msg is search(
|
||||||
"View 'db2.v1' references invalid table(s)")
|
'references invalid table')
|
||||||
|
|
||||||
- name: Dumps errors | Cleanup
|
- name: Dumps errors | Cleanup
|
||||||
community.mysql.mysql_db:
|
community.mysql.mysql_db:
|
||||||
name:
|
name:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue