def get_admin_db_url(self, db_name): engine = osdb.get_db_engine() if not engine: return None if cfg.exists('database_admin_url'): admin_url = cfg.get("database_admin_url") if engine == "postgres": admin_url = osdb.set_url_db(admin_url, 'postgres') else: if engine == 'postgres': if getuser() != "postgres": logger.error("Command must be run as 'postgres' user: "******"sudo -u postgres opensips-cli ...") return None """ For PG, do the initial setup using 'postgres' as role + DB """ admin_url = "postgres://postgres@localhost/postgres" else: admin_url = "{}://root@localhost".format(engine) if osdb.get_url_pswd(admin_url) is None: pswd = getpass("Password for admin {} user ({}): ".format( osdb.get_url_driver(admin_url, capitalize=True), osdb.get_url_user(admin_url))) logger.debug("read password: '******'", pswd) admin_url = osdb.set_url_password(admin_url, pswd) logger.debug("admin DB URL: '{}'".format(admin_url)) return admin_url
def do_migrate(self, params): if len(params) < 3: print( "Usage: database migrate <flavour> <old-database> <new-database>" ) return 0 flavour = params[0].lower() old_db = params[1] new_db = params[2] if flavour not in DB_MIGRATIONS: logger.error("unsupported migration flavour: {}".format(flavour)) return -1 admin_url = self.get_admin_db_url(new_db) if not admin_url: return -1 db = self.get_db(admin_url, new_db) if not db: return -1 if db.dialect != "mysql": logger.error("'migrate' is only available for MySQL right now! :(") return -1 if not db.exists(old_db): logger.error( "the source database ({}) does not exist!".format(old_db)) return -2 print("Creating database {}...".format(new_db)) if self.create_db(new_db, admin_url, db) < 0: return -1 if self.create_tables(new_db, admin_url, db) < 0: return -1 backend = osdb.get_url_driver(admin_url) # obtain the DB schema files for the in-use backend schema_path = self.get_schema_path(backend) if schema_path is None: return -1 migrate_scripts = self.get_migrate_scripts_path(backend) if migrate_scripts is None: logger.debug("migration scripts for %s not found", backend) return -1 else: logger.debug("found migration scripts for %s", backend) logger.info("Migrating all matching OpenSIPS tables...") db.migrate( flavour.replace('.', '_').upper(), migrate_scripts, old_db, new_db, DB_MIGRATIONS[flavour]) db.destroy() return True
def do_migrate(self, params): if len(params) < 2: print("Usage: database migrate <old-database> <new-database>") return 0 old_db = params[0] new_db = params[1] admin_url = self.get_admin_db_url(new_db) if not admin_url: return -1 db = self.get_db(admin_url, new_db) if not db: return -1 if db.dialect != "mysql": logger.error("'migrate' is only available for MySQL right now! :(") return -1 if not db.exists(old_db): logger.error( "the source database ({}) does not exist!".format(old_db)) return -2 print("Creating database {}...".format(new_db)) if self.create_db(new_db, admin_url, db) < 0: return -1 if self.create_tables(new_db, db, admin_url) < 0: return -1 backend = osdb.get_url_driver(admin_url) # obtain the DB schema files for the in-use backend schema_path = self.get_schema_path(backend) if schema_path is None: return -1 migrate_scripts = self.get_migrate_scripts_path(backend) if migrate_scripts is None: logger.debug("migration scripts for %s not found", backend) return -1 else: logger.debug("migration scripts for %s", migrate_scripts) print("Migrating all matching OpenSIPS tables...") db.migrate(migrate_scripts, old_db, new_db, MIGRATE_TABLES_24_TO_30) print("Finished copying OpenSIPS table data " + "into database '{}'!".format(new_db)) db.destroy() return True