diff --git a/cocluto/quman.py b/cocluto/quman.py index 8b47e7f..eaebd3d 100755 --- a/cocluto/quman.py +++ b/cocluto/quman.py @@ -140,37 +140,36 @@ class Sge(IGridEngine): return queues_status -def init_db(db_backend: ISqlDatabaseBackend): +def init_db(conn: ISqlConnection): - with db_backend.connect() as conn: - # a table storing the log of actions (queue activation or deactivation) - if not conn.table_exists('log'): - fields = [ - SqlTableField('id', SqlTableField.Type.FIELD_TYPE_INT, 'unique identifier of the modification', is_autoinc_index=True), - SqlTableField('timestamp', SqlTableField.Type.FIELD_TYPE_TIME, 'the time (and date) at which this modification has been made'), - SqlTableField('user_id', SqlTableField.Type.FIELD_TYPE_STRING, 'the id of user performing the action (unix user id)'), - SqlTableField('host_fqdn', SqlTableField.Type.FIELD_TYPE_STRING, 'the fully qualified domain name of the host on which the action is performed'), - SqlTableField('queue_machines', SqlTableField.Type.FIELD_TYPE_STRING, 'the comma separated list of queue machines that were modified'), - SqlTableField('action', SqlTableField.Type.FIELD_TYPE_STRING, 'the action performed: "disable" or "enable"'), - SqlTableField('disable_id', SqlTableField.Type.FIELD_TYPE_STRING, 'the tag of the disable request that led to this modification (e.g., auto.croconaus, manual.graffy, etc.)'), - SqlTableField('reason', SqlTableField.Type.FIELD_TYPE_STRING, 'the reason for the modification'), - ] - conn.create_table('log', fields) + # a table storing the log of actions (queue activation or deactivation) + if not conn.table_exists('log'): + fields = [ + SqlTableField('id', SqlTableField.Type.FIELD_TYPE_INT, 'unique identifier of the modification', is_autoinc_index=True), + SqlTableField('timestamp', SqlTableField.Type.FIELD_TYPE_TIME, 'the time (and date) at which this modification has been made'), + SqlTableField('user_id', SqlTableField.Type.FIELD_TYPE_STRING, 'the id of user performing the action (unix user id)'), + SqlTableField('host_fqdn', SqlTableField.Type.FIELD_TYPE_STRING, 'the fully qualified domain name of the host on which the action is performed'), + SqlTableField('queue_machines', SqlTableField.Type.FIELD_TYPE_STRING, 'the comma separated list of queue machines that were modified'), + SqlTableField('action', SqlTableField.Type.FIELD_TYPE_STRING, 'the action performed: "disable" or "enable"'), + SqlTableField('disable_id', SqlTableField.Type.FIELD_TYPE_STRING, 'the tag of the disable request that led to this modification (e.g., auto.croconaus, manual.graffy, etc.)'), + SqlTableField('reason', SqlTableField.Type.FIELD_TYPE_STRING, 'the reason for the modification'), + ] + conn.create_table('log', fields) - # a table storing the current disable requests - if not conn.table_exists('disables'): - fields = [ - SqlTableField('disable_request_id', SqlTableField.Type.FIELD_TYPE_INT, 'log.id of the disable action that led to this state'), - SqlTableField('queue_machine', SqlTableField.Type.FIELD_TYPE_STRING, 'the name of the queue machine that was disabled'), - ] - conn.create_table('disables', fields) + # a table storing the current disable requests + if not conn.table_exists('disables'): + fields = [ + SqlTableField('disable_request_id', SqlTableField.Type.FIELD_TYPE_INT, 'log.id of the disable action that led to this state'), + SqlTableField('queue_machine', SqlTableField.Type.FIELD_TYPE_STRING, 'the name of the queue machine that was disabled'), + ] + conn.create_table('disables', fields) - # a table storing the current queues - if not conn.table_exists('queues'): - fields = [ - SqlTableField('queue_machine', SqlTableField.Type.FIELD_TYPE_STRING, 'the name of the queue'), - ] - conn.create_table('queues', fields) + # a table storing the current queues + if not conn.table_exists('queues'): + fields = [ + SqlTableField('queue_machine', SqlTableField.Type.FIELD_TYPE_STRING, 'the name of the queue'), + ] + conn.create_table('queues', fields) def create_db_backend(db_def: str) -> ISqlDatabaseBackend: @@ -184,18 +183,18 @@ def create_db_backend(db_def: str) -> ISqlDatabaseBackend: db_name = db_params['db_name'] # the name of the database, eg 'quman' ssh_user = db_params['ssh_user'] # the ssh user which has the privileges to access the mysql database, eg 'qumandbw' backend = SshAccessedMysqlDb(sql_server_fqdn, db_user, db_name, ssh_user) - command = f'ssh "{ssh_user}@{sql_server_fqdn}" "hostname"' - completed_process = subprocess.run(command, shell=True, check=False, capture_output=True) - if completed_process.returncode != 0: - raise RuntimeError(f"Failed to connect to the mysql server via ssh with command '{command}'. Please check the connection parameters and make sure that the ssh user has access to the server. Error message: {completed_process.stderr.decode()}") + check_ssh = False + if check_ssh: + command = f'ssh "{ssh_user}@{sql_server_fqdn}" "hostname"' + completed_process = subprocess.run(command, shell=True, check=False, capture_output=True) + if completed_process.returncode != 0: + raise RuntimeError(f"Failed to connect to the mysql server via ssh with command '{command}'. Please check the connection parameters and make sure that the ssh user has access to the server. Error message: {completed_process.stderr.decode()}") elif db_type == 'sqlite': db_path = Path(db_params['sqlite_file_path']) # eg./quman_test/quman.sqlite backend = SqliteDb(db_path) else: raise ValueError("Unsupported database type: %s" % db_type) - init_db(backend) - return backend @@ -478,6 +477,7 @@ def main(): grid_engine = Sge() db_backend = create_db_backend(args.db_def) with db_backend.connect() as conn: + init_db(conn) assert isinstance(conn, ISqlConnection), f"Expected db_backend.connect() to return an ISqlConnection but got {type(conn)}" logging.debug("Connected to database successfully with connection %s", conn) quman = QueueManager(conn, grid_engine) diff --git a/cocluto/version.py b/cocluto/version.py index 132b022..4790dd9 100644 --- a/cocluto/version.py +++ b/cocluto/version.py @@ -1,4 +1,4 @@ -__version__ = '1.0.32' +__version__ = '1.0.33' class Version(object):