コード例 #1
0
ファイル: repository.py プロジェクト: Mat-Loz/mongoctl
def get_mongoctl_database():

    # if not using db then return
    if not has_db_repository():
        return

    global __mongoctl_db__

    if __mongoctl_db__ is not None:
        return __mongoctl_db__

    log_verbose("Connecting to mongoctl db...")
    try:

        (conn, dbname) = _db_repo_connect()

        __mongoctl_db__ = conn[dbname]
        return __mongoctl_db__
    except Exception, e:
        log_exception(e)
        __mongoctl_db__ = "OFFLINE"
        log_warning("\n*************\n"
                    "Will not be using database repository for configurations"
                    " at this time!"
                    "\nREASON: Could not establish a database"
                    " connection to mongoctl's database repository."
                    "\nCAUSE: %s."
                    "\n*************" % e)
コード例 #2
0
ファイル: users.py プロジェクト: mongolab/mongoctl
def setup_server_admin_users(server):

    admin_users = server.get_admin_users()
    if server.is_auth():
        admin_users = prepend_global_admin_user(admin_users, server)

    if admin_users is None or len(admin_users) < 1:
        log_verbose("No users configured for admin DB...")
        return 0

    root_user_added = setup_root_admin_user(server, admin_users)
    if not root_user_added:
        log_verbose("Not seeding users for database 'admin'")
        return 0

    log_verbose("Checking setup for other admin users...")
    count_new_users = 1
    try:
        admin_db = server.get_db("admin")
        count_new_users += setup_db_users(server, admin_db, admin_users[1:])
        return count_new_users
    except Exception, e:
        log_exception(e)
        raise MongoctlException(
            "Error while setting up admin users on server '%s'."
            "\n Cause: %s" % (server.id, e))
コード例 #3
0
def get_mongoctl_database():

    # if not using db then return
    if not has_db_repository():
        return

    global __mongoctl_db__

    if __mongoctl_db__ is not None:
        return __mongoctl_db__

    log_verbose("Connecting to mongoctl db...")
    try:
        client = _db_repo_connect()
        # issue a call to server to ensure it connects
        client.get_database("admin").command({"ping": 1})
        __mongoctl_db__ = client.get_default_database()
        return __mongoctl_db__
    except Exception, e:
        log_exception(e)
        __mongoctl_db__ = "OFFLINE"
        log_warning("\n*************\n"
                    "Will not be using database repository for configurations"
                    " at this time!"
                    "\nREASON: Could not establish a database"
                    " connection to mongoctl's database repository."
                    "\nCAUSE: %s."
                    "\n*************" % e)
コード例 #4
0
ファイル: repository.py プロジェクト: sfdcmahi/mongoctl
def get_mongoctl_database():

    # if not using db then return
    if not has_db_repository():
        return

    global __mongoctl_db__

    if __mongoctl_db__ is not None:
        return __mongoctl_db__

    log_verbose("Connecting to mongoctl db...")
    try:
        client = _db_repo_connect()
        # issue a call to server to ensure it connects
        client.get_database("admin").command({"ping": 1})
        __mongoctl_db__ = client.get_default_database()
        return __mongoctl_db__
    except Exception, e:
        log_exception(e)
        __mongoctl_db__ = "OFFLINE"
        log_warning("\n*************\n"
                    "Will not be using database repository for configurations"
                    " at this time!"
                    "\nREASON: Could not establish a database"
                    " connection to mongoctl's database repository."
                    "\nCAUSE: %s."
                    "\n*************" % e)
コード例 #5
0
ファイル: users.py プロジェクト: sfdcmahi/mongoctl
def setup_server_admin_users(server):

    admin_users = server.get_admin_users()
    if server.is_auth():
        admin_users = prepend_global_admin_user(admin_users, server)

    if admin_users is None or len(admin_users) < 1:
        log_verbose("No users configured for admin DB...")
        return 0

    root_user_added = setup_root_admin_user(server, admin_users)
    if not root_user_added:
        log_verbose("Not seeding users for database 'admin'")
        return 0

    log_verbose("Checking setup for other admin users...")
    count_new_users = 1
    try:
        admin_db = server.get_db("admin")
        count_new_users += setup_db_users(server, admin_db, admin_users[1:])
        return count_new_users
    except Exception, e:
        log_exception(e)
        raise MongoctlException(
            "Error while setting up admin users on server '%s'."
            "\n Cause: %s" % (server.id, e))
コード例 #6
0
ファイル: mongoctl.py プロジェクト: sfdcmahi/mongoctl
def main(args):
    try:
        do_main(args)
    except MongoctlException,e:
        log_error("mongoctl error: %s" % e)
        log_exception(e)
        exit(1)
コード例 #7
0
ファイル: repository.py プロジェクト: zenglzh/mongoctl
def get_mongoctl_database():

    # if not using db then return
    if not has_db_repository():
        return

    global __mongoctl_db__

    if __mongoctl_db__ is not None:
        return __mongoctl_db__

    log_verbose("Connecting to mongoctl db...")
    try:

        (conn, dbname) = _db_repo_connect()

        __mongoctl_db__ = conn[dbname]
        return __mongoctl_db__
    except Exception, e:
        log_exception(e)
        __mongoctl_db__ = "OFFLINE"
        log_warning("\n*************\n"
                    "Will not be using database repository for configurations"
                    " at this time!"
                    "\nREASON: Could not establish a database"
                    " connection to mongoctl's database repository."
                    "\nCAUSE: %s."
                    "\n*************" % e)
コード例 #8
0
ファイル: mongoctl.py プロジェクト: mongolab/mongoctl
def main(args):
    try:
        do_main(args)
    except MongoctlException, e:
        log_error(e)
        log_exception(e)
        exit(1)
コード例 #9
0
def execute(args):
    """
        The real entry for processing requests.
    """
    try:
        return str(__do_execute(args))
    except MongoctlException, e:
        log_error(e)
        log_exception(e)
コード例 #10
0
ファイル: repository.py プロジェクト: hongchoi/mongoctl
def set_commandline_servers_and_clusters(servers_json_str, clusters_json_str):
    global __commandline_servers__, __commandline_clusters__
    try:
        if servers_json_str:
            __commandline_servers__ = json_util.loads(servers_json_str)
        if clusters_json_str:
            __commandline_clusters__ = json_util.loads(clusters_json_str)
    except Exception, ex:
        log_exception(ex)
        raise MongoctlException("--servers/--clusters must be a valid json string: %s" % ex)
コード例 #11
0
ファイル: repository.py プロジェクト: sfdcmahi/mongoctl
def set_commandline_servers_and_clusters(servers_json_str, clusters_json_str):
    global __commandline_servers__, __commandline_clusters__
    try:
        if servers_json_str:
            __commandline_servers__ = json_util.loads(servers_json_str)
        if clusters_json_str:
            __commandline_clusters__ = json_util.loads(clusters_json_str)
    except Exception, ex:
        log_exception(ex)
        raise MongoctlException("--servers/--clusters must be a valid json string: %s" % ex)
コード例 #12
0
ファイル: users.py プロジェクト: zenglzh/mongoctl
def setup_server_local_users(server):

    seed_local_users = False
    try:
        local_db = server.get_db("local", retry=False)
        if not local_db['system.users'].find_one():
            seed_local_users = True
    except Exception, e:
        log_exception(e)
        pass
コード例 #13
0
ファイル: users.py プロジェクト: zenglzh/mongoctl
def setup_server_local_users(server):

    seed_local_users = False
    try:
        local_db = server.get_db("local", retry=False)
        if not local_db['system.users'].find_one():
            seed_local_users = True
    except Exception, e:
        log_exception(e)
        pass
コード例 #14
0
ファイル: users.py プロジェクト: zenglzh/mongoctl
def should_seed_db_users(server, dbname):
    log_verbose("See if we should seed users for database '%s'" % dbname)
    try:
        connection = server.get_db_connection()
        if connection[dbname]['system.users'].find_one():
            return False
        else:
            return True
    except Exception, e:
        log_exception(e)
        return False
コード例 #15
0
ファイル: users.py プロジェクト: zenglzh/mongoctl
def should_seed_db_users(server, dbname):
    log_verbose("See if we should seed users for database '%s'" % dbname)
    try:
        connection = server.get_db_connection()
        if connection[dbname]['system.users'].find_one():
            return False
        else:
            return True
    except Exception, e:
        log_exception(e)
        return False
コード例 #16
0
ファイル: users.py プロジェクト: zenglzh/mongoctl
def should_seed_users(server):
    log_verbose("See if we should seed users for server '%s'" % server.id)
    try:
        connection = server.get_db_connection()
        dbnames = connection.database_names()
        for dbname in dbnames:
            if connection[dbname]['system.users'].find_one():
                return False
        return True
    except Exception, e:
        log_exception(e)
        return False
コード例 #17
0
def execute(args):
    """
        The real entry for processing requests.
    """
    ret_str = "Error"
    try:
        ret_str = __do_execute(args)
        if isinstance(ret_str, basestring) is False:
            ret_str = str(ret_str)
    except MongoctlException, e:
        log_error(e)
        log_exception(e)
コード例 #18
0
ファイル: users.py プロジェクト: nowshad-amin/mongoctl
def should_seed_db_users(server, dbname):
    log_verbose("See if we should seed users for database '%s'" % dbname)
    try:
        connection = server.get_db_connection()
        if connection[dbname]['system.users'].find_one():
            return False
        else:
            return True
    except Exception, e:
        log_exception(e)
        if is_auth_error(e) and dbname == "admin" and server.try_on_auth_failures():
            return True
        return False
コード例 #19
0
ファイル: users.py プロジェクト: zenglzh/mongoctl
def should_seed_users(server):
    log_verbose("See if we should seed users for server '%s'" %
                server.id)
    try:
        connection = server.get_db_connection()
        dbnames = connection.database_names()
        for dbname in dbnames:
            if connection[dbname]['system.users'].find_one():
                return False
        return True
    except Exception, e:
        log_exception(e)
        return False
コード例 #20
0
ファイル: users.py プロジェクト: hongchoi/mongoctl
def setup_server_db_users(server, dbname, db_users):
    log_verbose("Checking if there are any users that needs to be added for " "database '%s'..." % dbname)

    if not should_seed_db_users(server, dbname):
        log_verbose("Not seeding users for database '%s'" % dbname)
        return 0

    db = server.get_db(dbname)

    try:
        any_new_user_added = setup_db_users(server, db, db_users)
        if not any_new_user_added:
            log_verbose("No new users added for database '%s'" % dbname)
        return any_new_user_added
    except Exception, e:
        log_exception(e)
        raise MongoctlException(
            "Error while setting up users for '%s'" " database on server '%s'." "\n Cause: %s" % (dbname, server.id, e)
        )
コード例 #21
0
ファイル: users.py プロジェクト: zenglzh/mongoctl
def setup_server_db_users(server, dbname, db_users):
    log_verbose("Checking if there are any users that needs to be added for "
                "database '%s'..." % dbname)

    if not should_seed_db_users(server, dbname):
        log_verbose("Not seeding users for database '%s'" % dbname)
        return 0

    db = server.get_db(dbname)

    try:
        any_new_user_added = setup_db_users(server, db, db_users)
        if not any_new_user_added:
            log_verbose("No new users added for database '%s'" % dbname)
        return any_new_user_added
    except Exception, e:
        log_exception(e)
        raise MongoctlException(
            "Error while setting up users for '%s'" \
            " database on server '%s'."
            "\n Cause: %s" % (dbname, server.id, e))
コード例 #22
0
ファイル: users.py プロジェクト: zenglzh/mongoctl
def setup_server_admin_users(server):

    if not should_seed_db_users(server, "admin"):
        log_verbose("Not seeding users for database 'admin'")
        return 0

    admin_users = server.get_admin_users()
    if server.is_auth():
        admin_users = prepend_global_admin_user(admin_users, server)

    if (admin_users is None or len(admin_users) < 1):
        log_verbose("No users configured for admin DB...")
        return 0

    log_verbose("Checking setup for admin users...")
    count_new_users = 0
    try:
        admin_db = server.get_db("admin")

        # potentially create the 1st admin user
        count_new_users += setup_db_users(server, admin_db, admin_users[0:1])

        # the 1st-time init case:
        # BEFORE adding 1st admin user, auth. is not possible --
        #       only localhost cxn gets a magic pass.
        # AFTER adding 1st admin user, authentication is required;
        #      so, to be sure we now have authenticated cxn, re-pull admin db:
        admin_db = server.get_db("admin")

        # create the rest of the users
        count_new_users += setup_db_users(server, admin_db, admin_users[1:])
        return count_new_users
    except Exception, e:
        log_exception(e)
        raise MongoctlException(
            "Error while setting up admin users on server '%s'."
            "\n Cause: %s" % (server.id, e))
コード例 #23
0
ファイル: users.py プロジェクト: zenglzh/mongoctl
def setup_server_admin_users(server):

    if not should_seed_db_users(server, "admin"):
        log_verbose("Not seeding users for database 'admin'")
        return 0

    admin_users = server.get_admin_users()
    if server.is_auth():
        admin_users = prepend_global_admin_user(admin_users, server)

    if (admin_users is None or len(admin_users) < 1):
        log_verbose("No users configured for admin DB...")
        return 0

    log_verbose("Checking setup for admin users...")
    count_new_users = 0
    try:
        admin_db = server.get_db("admin")

        # potentially create the 1st admin user
        count_new_users += setup_db_users(server, admin_db, admin_users[0:1])

        # the 1st-time init case:
        # BEFORE adding 1st admin user, auth. is not possible --
        #       only localhost cxn gets a magic pass.
        # AFTER adding 1st admin user, authentication is required;
        #      so, to be sure we now have authenticated cxn, re-pull admin db:
        admin_db = server.get_db("admin")

        # create the rest of the users
        count_new_users += setup_db_users(server, admin_db, admin_users[1:])
        return count_new_users
    except Exception, e:
        log_exception(e)
        raise MongoctlException(
            "Error while setting up admin users on server '%s'."
            "\n Cause: %s" % (server.id, e))
コード例 #24
0
ファイル: mongoctl.py プロジェクト: mongolab/mongoctl
CONF_ROOT_ENV_VAR = "MONGOCTL_CONF"

SERVER_ID_PARAM = "server"

###############################################################################
# MAIN
###############################################################################
def main(args):
    try:
        do_main(args)
    except MongoctlException, e:
        log_error(e)
        log_exception(e)
        exit(1)
    except Exception, e:
        log_exception(e)
        raise


###############################################################################
def do_main(args):
    init_mongoctl_signal_handler()

    header = """
-------------------------------------------------------------------------------------------
  __ _  ___  ___  ___ ____  ____/ /_/ /
 /  ' \/ _ \/ _ \/ _ `/ _ \/ __/ __/ / 
/_/_/_/\___/_//_/\_, /\___/\__/\__/_/  
                /___/ 
-------------------------------------------------------------------------------------------
   """
コード例 #25
0
ファイル: users.py プロジェクト: sfdcmahi/mongoctl
        kwargs = {}
        if server.is_config_server():
            # majority is the only valid write concern when writing to config server replica sets
            kwargs["writeConcern"] = {"w": "majority"}

        # TODO this method is deprecated and will be removed in 4.0. So we should change this when we upgrade to 4.0
        db.add_user(username, password, read_only, **kwargs)
    except OperationFailure, ofe:
        # This is a workaround for PYTHON-407. i.e. catching a harmless
        # error that is raised after adding the first
        if "login" in str(ofe):
            pass
        else:
            raise
    except AutoReconnect, ar:
        log_exception(ar)
        if num_tries < 3:
            log_warning("_mongo_add_user: Caught a AutoReconnect error. %s " %
                        ar)
            # check if the user/pass was saved successfully
            if db.authenticate(username, password):
                log_info("_mongo_add_user: user was added successfully. "
                         "no need to retry")
            else:
                log_warning("_mongo_add_user: re-trying ...")
                _mongo_add_user(server,
                                db,
                                username,
                                password,
                                read_only=read_only,
                                num_tries=num_tries + 1)
コード例 #26
0
ファイル: mongoctl.py プロジェクト: sfdcmahi/mongoctl
CONF_ROOT_ENV_VAR = "MONGOCTL_CONF"

SERVER_ID_PARAM = "server"

###############################################################################
# MAIN
###############################################################################
def main(args):
    try:
        do_main(args)
    except MongoctlException,e:
        log_error("mongoctl error: %s" % e)
        log_exception(e)
        exit(1)
    except Exception, e:
        log_exception(e)
        raise

###############################################################################
def do_main(args):
    init_mongoctl_signal_handler()

    header = """
-------------------------------------------------------------------------------------------
  __ _  ___  ___  ___ ____  ____/ /_/ /
 /  ' \/ _ \/ _ \/ _ `/ _ \/ __/ __/ / 
/_/_/_/\___/_//_/\_, /\___/\__/\__/_/  
                /___/ 
-------------------------------------------------------------------------------------------
   """
コード例 #27
0
ファイル: users.py プロジェクト: mongolab/mongoctl
        kwargs = {}
        if server.is_config_server():
            # majority is the only valid write concern when writing to config server replica sets
            kwargs["writeConcern"] = {"w": "majority"}

        # TODO this method is deprecated and will be removed in 4.0. So we should change this when we upgrade to 4.0
        db.add_user(username, password, read_only, **kwargs)
    except OperationFailure, ofe:
        # This is a workaround for PYTHON-407. i.e. catching a harmless
        # error that is raised after adding the first
        if "login" in str(ofe):
            pass
        else:
            raise
    except AutoReconnect, ar:
        log_exception(ar)
        if num_tries < 3:
            log_warning("_mongo_add_user: Caught a AutoReconnect error. %s " %
                        ar)
            # check if the user/pass was saved successfully
            if db.authenticate(username, password):
                log_info("_mongo_add_user: user was added successfully. "
                         "no need to retry")
            else:
                log_warning("_mongo_add_user: re-trying ...")
                _mongo_add_user(server, db, username, password,
                                read_only=read_only, num_tries=num_tries+1)
        else:
            raise