diff --git a/lib/ansible/modules/database/mysql/mysql_variables.py b/lib/ansible/modules/database/mysql/mysql_variables.py index b0f175be94c..1ce7ef2c44c 100644 --- a/lib/ansible/modules/database/mysql/mysql_variables.py +++ b/lib/ansible/modules/database/mysql/mysql_variables.py @@ -18,34 +18,51 @@ module: mysql_variables short_description: Manage MySQL global variables description: - - Query / Set MySQL variables. +- Query / Set MySQL variables. version_added: 1.3 author: - Balazs Pocze (@banyek) options: - variable: - description: - - Variable name to operate - type: str - required: True - value: - description: - - If set, then sets variable value to this - type: str + variable: + description: + - Variable name to operate + type: str + required: yes + value: + description: + - If set, then sets variable value to this + type: str + +seealso: +- module: mysql_info +- name: MySQL SET command reference + description: Complete reference of the MySQL SET command documentation. + link: https://dev.mysql.com/doc/refman/8.0/en/set-statement.html + extends_documentation_fragment: - mysql ''' + EXAMPLES = r''' - name: Check for sync_binlog setting -- mysql_variables: + mysql_variables: variable: sync_binlog - name: Set read_only variable to 1 -- mysql_variables: + mysql_variables: variable: read_only value: 1 ''' +RETURN = r''' +queries: + description: List of executed queries which modified DB's state. + returned: if executed + type: list + sample: ["SET GLOBAL `read_only` = 1"] + version_added: '2.10' +''' + import os import warnings from re import match @@ -55,6 +72,8 @@ from ansible.module_utils.database import SQLParseError, mysql_quote_identifier from ansible.module_utils.mysql import mysql_connect, mysql_driver, mysql_driver_fail_msg from ansible.module_utils._text import to_native +executed_queries = [] + def typedvalue(value): """ @@ -102,6 +121,7 @@ def setvariable(cursor, mysqlvar, value): query = "SET GLOBAL %s = " % mysql_quote_identifier(mysqlvar, 'vars') try: cursor.execute(query + "%s", (value,)) + executed_queries.append(query + "%s" % value) cursor.fetchall() result = True except Exception as e: @@ -151,8 +171,9 @@ def main(): connect_timeout=connect_timeout) except Exception as e: if os.path.exists(config_file): - module.fail_json(msg="unable to connect to database, check login_user and login_password are correct or %s has the credentials. " - "Exception message: %s" % (config_file, to_native(e))) + module.fail_json(msg=("unable to connect to database, check login_user and " + "login_password are correct or %s has the credentials. " + "Exception message: %s" % (config_file, to_native(e)))) else: module.fail_json(msg="unable to find %s. Exception message: %s" % (config_file, to_native(e))) @@ -173,7 +194,8 @@ def main(): result = to_native(e) if result is True: - module.exit_json(msg="Variable change succeeded prev_value=%s" % value_actual, changed=True) + module.exit_json(msg="Variable change succeeded prev_value=%s" % value_actual, + changed=True, queries=executed_queries) else: module.fail_json(msg=result, changed=False) diff --git a/test/integration/targets/mysql_variables/tasks/main.yml b/test/integration/targets/mysql_variables/tasks/main.yml index 1b3fd3f4c41..863d5509546 100644 --- a/test/integration/targets/mysql_variables/tasks/main.yml +++ b/test/integration/targets/mysql_variables/tasks/main.yml @@ -71,6 +71,10 @@ login_unix_socket: '{{ mysql_socket }}' register: result +- assert: + that: + - result.queries == ["SET GLOBAL `{{ set_name }}` = {{ set_value }}"] + - include: assert_var.yml changed=true output={{result}} var_name={{set_name}} var_value='{{set_value}}' # ============================================================