Beispiel #1
0
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))
Beispiel #2
0
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)
Beispiel #3
0
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)