From 4b0806906160cde861507bd82cdf9974a96d1508 Mon Sep 17 00:00:00 2001 From: Jorge-Rodriguez Date: Sun, 7 Mar 2021 16:04:10 +0200 Subject: [PATCH] Add dychotomy handling for mysql_replication --- .../implementations/mariadb/replication.py | 7 +++++ .../implementations/mysql/replication.py | 7 +++++ plugins/modules/mysql_replication.py | 26 +++++-------------- 3 files changed, 21 insertions(+), 19 deletions(-) create mode 100644 plugins/module_utils/implementations/mariadb/replication.py create mode 100644 plugins/module_utils/implementations/mysql/replication.py diff --git a/plugins/module_utils/implementations/mariadb/replication.py b/plugins/module_utils/implementations/mariadb/replication.py new file mode 100644 index 0000000..73f3263 --- /dev/null +++ b/plugins/module_utils/implementations/mariadb/replication.py @@ -0,0 +1,7 @@ +from ansible_collections.community.mysql.plugins.module_utils.mysql import get_server_version +from distutils.version import LooseVersion + + +def uses_replica_terminology(cursor): + """Checks if REPLICA must be used instead of SLAVE""" + return LooseVersion(get_server_version(cursor)) >= LooseVersion('10.5.1') diff --git a/plugins/module_utils/implementations/mysql/replication.py b/plugins/module_utils/implementations/mysql/replication.py new file mode 100644 index 0000000..5b9f088 --- /dev/null +++ b/plugins/module_utils/implementations/mysql/replication.py @@ -0,0 +1,7 @@ +from ansible_collections.community.mysql.plugins.module_utils.mysql import get_server_version +from distutils.version import LooseVersion + + +def uses_replica_terminology(cursor): + """Checks if REPLICA must be used instead of SLAVE""" + return LooseVersion(get_server_version(cursor)) >= LooseVersion('8.0.22') diff --git a/plugins/modules/mysql_replication.py b/plugins/modules/mysql_replication.py index 55ac725..a296b08 100644 --- a/plugins/modules/mysql_replication.py +++ b/plugins/modules/mysql_replication.py @@ -259,24 +259,6 @@ from distutils.version import LooseVersion executed_queries = [] -def uses_replica_terminology(cursor): - """Checks if REPLICA must be used instead of SLAVE""" - cursor.execute("SELECT VERSION() AS version") - result = cursor.fetchone() - - if isinstance(result, dict): - version_str = result['version'] - else: - version_str = result[0] - - version = LooseVersion(version_str) - - if 'mariadb' in version_str.lower(): - return version >= LooseVersion('10.5.1') - else: - return version >= LooseVersion('8.0.22') - - def get_master_status(cursor): cursor.execute("SHOW MASTER STATUS") masterstatus = cursor.fetchone() @@ -502,9 +484,15 @@ def main(): else: module.fail_json(msg="unable to find %s. Exception message: %s" % (config_file, to_native(e))) + cursor.execute("SELECT VERSION()") + if 'mariadb' in cursor.fetchone()[0].lower(): + from ansible_collections.community.mysql.plugins.module_utils.implementations.mariadb import replication as impl + else: + from ansible_collections.community.mysql.plugins.module_utils.implementations.mysql import replication as impl + # Since MySQL 8.0.22 and MariaDB 10.5.1, # "REPLICA" must be used instead of "SLAVE" - if uses_replica_terminology(cursor): + if impl.uses_replica_terminology(cursor): replica_term = 'REPLICA' if master_use_gtid == 'slave_pos': module.deprecate('master_use_gtid "slave_pos" value is deprecated, use "replica_pos" instead.',