def main(): argument_spec = mysql_common_argument_spec() argument_spec.update( login_db=dict(type='str'), filter=dict(type='list'), exclude_fields=dict(type='list'), return_empty_dbs=dict(type='bool', default=False), ) module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True, ) db = module.params['login_db'] connect_timeout = module.params['connect_timeout'] login_user = module.params['login_user'] login_password = module.params['login_password'] ssl_cert = module.params['client_cert'] ssl_key = module.params['client_key'] ssl_ca = module.params['ca_cert'] config_file = module.params['config_file'] filter_ = module.params['filter'] exclude_fields = module.params['exclude_fields'] return_empty_dbs = module.params['return_empty_dbs'] if filter_: filter_ = [f.strip() for f in filter_] if exclude_fields: exclude_fields = set([f.strip() for f in exclude_fields]) if mysql_driver is None: module.fail_json(msg=mysql_driver_fail_msg) try: cursor, db_conn = mysql_connect(module, login_user, login_password, config_file, ssl_cert, ssl_key, ssl_ca, db, connect_timeout=connect_timeout, cursor_class='DictCursor') except Exception as 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))) ############################### # Create object and do main job mysql = MySQL_Info(module, cursor) module.exit_json(changed=False, **mysql.get_info(filter_, exclude_fields, return_empty_dbs))
def main(): argument_spec = mysql_common_argument_spec() argument_spec.update( mode=dict(type='str', default='get_replica', choices=[ 'get_primary', 'get_replica', 'change_primary', 'stop_replica', 'start_replica', 'reset_primary', 'reset_replica', 'reset_replica_all', ]), primary_auto_position=dict(type='bool', default=False), primary_host=dict(type='str'), primary_user=dict(type='str'), primary_password=dict(type='str', no_log=True), primary_port=dict(type='int'), primary_connect_retry=dict(type='int'), primary_log_file=dict(type='str'), primary_log_pos=dict(type='int'), relay_log_file=dict(type='str'), relay_log_pos=dict(type='int'), primary_ssl=dict(type='bool', default=False), primary_ssl_ca=dict(type='str'), primary_ssl_capath=dict(type='str'), primary_ssl_cert=dict(type='str'), primary_ssl_key=dict(type='str', no_log=False), primary_ssl_cipher=dict(type='str'), primary_use_gtid=dict( type='str', choices=['current_pos', 'replica_pos', 'slave_pos', 'disabled']), primary_delay=dict(type='int'), connection_name=dict(type='str'), channel=dict(type='str'), fail_on_error=dict(type='bool', default=False), ) module = AnsibleModule( argument_spec=argument_spec, mutually_exclusive=[['connection_name', 'channel']], ) module.log( msg="-------------------------------------------------------------") client = MariadbReplication(module) result = client.run() # module.log(msg="= result: {}".format(result)) module.log( msg="-------------------------------------------------------------") module.exit_json(**result)
def main(): argument_spec = mysql_common_argument_spec() argument_spec.update( login_db=dict(type='str'), filter=dict(type='list'), exclude_fields=dict(type='list'), ) # The module doesn't support check_mode # because of it doesn't change anything module = AnsibleModule( argument_spec=argument_spec, supports_check_mode=True, ) db = module.params['login_db'] connect_timeout = module.params['connect_timeout'] login_user = module.params['login_user'] login_password = module.params['login_password'] ssl_cert = module.params['client_cert'] ssl_key = module.params['client_key'] ssl_ca = module.params['ca_cert'] config_file = module.params['config_file'] filter_ = module.params['filter'] exclude_fields = module.params['exclude_fields'] if filter_: filter_ = [f.strip() for f in filter_] if exclude_fields: exclude_fields = set([f.strip() for f in exclude_fields]) if mysql_driver is None: module.fail_json(msg=mysql_driver_fail_msg) cursor = mysql_connect(module, login_user, login_password, config_file, ssl_cert, ssl_key, ssl_ca, db, connect_timeout=connect_timeout, cursor_class='DictCursor') ############################### # Create object and do main job mysql = MySQL_Info(module, cursor) module.exit_json(changed=False, **mysql.get_info(filter_, exclude_fields))
def main(): argument_spec = mysql_common_argument_spec() argument_spec.update( query=dict(type="list", elements="str", required=True), login_db=dict(type="str"), positional_args=dict(type="list"), named_args=dict(type="dict"), # single_transaction=dict(type="bool", default=False), ) module = AnsibleModule(argument_spec=argument_spec, mutually_exclusive=(("positional_args", "named_args"), )) db = module.params["login_db"] connect_timeout = module.params["connect_timeout"] login_user = module.params["login_user"] login_password = module.params["login_password"] ssl_cert = module.params["client_cert"] ssl_key = module.params["client_key"] ssl_ca = module.params["ca_cert"] config_file = module.params["config_file"] query = module.params["query"] # if module.params["single_transaction"]: # autocommit = False # else: # autocommit = True # # Prepare args: if module.params.get("positional_args"): arguments = module.params["positional_args"] elif module.params.get("named_args"): arguments = module.params["named_args"] else: arguments = None if mysql_driver is None: module.fail_json(msg=mysql_driver_fail_msg) # Connect to DB: try: cursor = mysql_connect( module, login_user, login_password, config_file, ssl_cert, ssl_key, ssl_ca, db, connect_timeout=connect_timeout, cursor_class="DictCursor", # autocommit=autocommit, ) except Exception as 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))) # Set defaults: changed = False max_keyword_len = len(max(DML_QUERY_KEYWORDS + DDL_QUERY_KEYWORDS, key=len)) # Execute query: query_result = [] executed_queries = [] rowcount = [] for q in query: try: cursor.execute(q, arguments) except Exception as e: # if not autocommit: # db_connection.rollback() cursor.close() module.fail_json(msg="Cannot execute SQL '%s' args [%s]: %s" % (q, arguments, to_native(e))) try: query_result.append([dict(row) for row in cursor.fetchall()]) except Exception as e: # if not autocommit: # db_connection.rollback() module.fail_json(msg="Cannot fetch rows from cursor: %s" % to_native(e)) # Check DML or DDL keywords in query and set changed accordingly: q = q.lstrip()[0:max_keyword_len].upper() for keyword in DML_QUERY_KEYWORDS: if keyword in q and cursor.rowcount > 0: changed = True for keyword in DDL_QUERY_KEYWORDS: if keyword in q: changed = True executed_queries.append(cursor._last_executed) rowcount.append(cursor.rowcount) # When the module run with the single_transaction == True: # if not autocommit: # db_connection.commit() # Create dict with returned values: kw = { "changed": changed, "executed_queries": executed_queries, "query_result": query_result, "rowcount": rowcount } # Exit: module.exit_json(**kw)