This should make autotest-database-turnkey support other database database backends transparently.
Signed-off-by: Cleber Rosa <[email protected]> --- installation_support/autotest-database-turnkey | 115 +++---------------------- 1 file changed, 10 insertions(+), 105 deletions(-) diff --git a/installation_support/autotest-database-turnkey b/installation_support/autotest-database-turnkey index 9d59568..9bb4d3c 100755 --- a/installation_support/autotest-database-turnkey +++ b/installation_support/autotest-database-turnkey @@ -22,103 +22,7 @@ except ImportError: from autotest.client.shared import global_config from autotest.frontend import setup_django_environment - -try: - from autotest.client.shared import global_config - settings_file_path = global_config.global_config.config_file -except ImportError: - from autotest.client.shared import settings - settings_file_path = settings.settings.config_file - -DB_ADMIN_USER = 'root' - - -def database_already_exists(database, user, password, hostname='localhost'): - ''' - Detects if the given password exist by trying to connect to it - ''' - try: - connection = MySQLdb.connect(user=user, passwd=password, db=database, - host=hostname) - return True - except MySQLdb.OperationalError: - return False - - -def admin_credentials_valid(password, hostname='localhost'): - ''' - Checks if the database admin (root) credential is valid - ''' - try: - connection = MySQLdb.connect(user=DB_ADMIN_USER, passwd=password) - return True - except: - return False - - -def create_database(database, root_password='', - hostname='localhost', conn=None, transaction=False): - if conn is None: - if not admin_credentials_valid(root_password, hostname): - logging.error("Failed to logon as the database admin user") - return False - conn = MySQLdb.connect(user=DB_ADMIN_USER, passwd=root_password) - - if database_already_exists(database, DB_ADMIN_USER, root_password, - hostname): - logging.info("Database already exists, doing nothing") - return True - - if transaction: - conn.begin() - - curs = conn.cursor() - try: - curs.execute("CREATE DATABASE %s" % database) - except MySQLdb.ProgrammingError, MySQLdb.OperationalError: - conn.rollback() - return False - - if transaction: - conn.commit() - - return True - - -def database_setup(database, user, password, root_password, - hostname='localhost'): - ''' - Attempts to create database AND users AND set privileges - ''' - # To actually give the privileges, we use the root user - if not admin_credentials_valid(root_password, hostname): - logging.error("Failed to logon as the database admin user") - return False - - conn = MySQLdb.connect(user=DB_ADMIN_USER, passwd=root_password) - conn.begin() - curs = conn.cursor() - - if not create_database(database, hostname=hostname, - root_password=root_password, conn=conn): - conn.rollback() - return False - - - GRANT_CMDS = ["grant all privileges on %(database)s.* TO " - "'%(user)s'@'localhost' identified by '%(password)s'", - "grant SELECT on %(database)s.* TO 'nobody'@'%%'", - "grant SELECT on %(database)s.* TO 'nobody'@'localhost'"] - for cmd in GRANT_CMDS: - cmd_ = cmd % locals() - try: - curs.execute(cmd_) - except: - conn.rollback() - return False - - conn.commit() - return True +from autotest.installation_support import database_manager def set_global_config_value(section, key, value): @@ -243,10 +147,15 @@ class App(object): 'password' : opts.password, 'root_password' : opts.root_password} + klass = database_manager.get_manager_class(conn_options['db_type']) + mngr = klass(conn_options['database'], + admin_password=conn_options['root_password'], + user=conn_options['user'], + password=conn_options['password'], + host=conn_options['host']) + if opts.check_credentials: - result = admin_credentials_valid(conn_options['root_password'], - conn_options['host']) - if result: + if mngr.admin_credentials_valid(): return 0 else: return -1 @@ -262,11 +171,7 @@ class App(object): return -1 # Perform the creation of the database - creation = database_setup(conn_options['database'], - conn_options['user'], - conn_options['password'], - conn_options['root_password'], - conn_options['host']) + creation = mngr.setup() if not creation: logging.error("Failure while creating the database " "and setting privileges") -- 1.7.11.7 _______________________________________________ Autotest-kernel mailing list [email protected] https://www.redhat.com/mailman/listinfo/autotest-kernel
