def repo_sync_task(products=None, repos=None): """Function to start syncing all repositories from input list or from database.""" try: init_db() repository_controller = RepositoryController() if products: product_store = ProductStore() product_store.store(products) # Reference imported content set to associate with repositories repository_controller.repo_store.set_content_set_db_mapping( product_store.cs_to_dbid) if repos: # Sync repos from input for repo in repos: repo_label, repo_url, content_set, cert_name, ca_cert, cert, key = repo repository_controller.add_repository(repo_label, repo_url, content_set=content_set, cert_name=cert_name, ca_cert=ca_cert, cert=cert, key=key) else: # Re-sync repos in DB repository_controller.add_synced_repositories() repository_controller.store() except: # pylint: disable=bare-except LOGGER.log(traceback.format_exc()) DatabaseHandler.rollback() return "ERROR" return "OK"
def main(): """Main function.""" parser = ArgumentParser() parser.add_argument("-d", "--db-name", action="store", help="Database name (default 'vmaas').", default="vmaas") parser.add_argument("-U", "--db-user", action="store", help="Database user (default 'vmaas_user').", default="vmaas_user") parser.add_argument("-P", "--db-pass", action="store", help="Database password (default 'vmaas_passwd').", default="vmaas_passwd") parser.add_argument("-H", "--db-host", action="store", help="Database host (default 'localhost').", default="localhost") parser.add_argument("-p", "--db-port", action="store", help="Database port (default '5432').", default="5432") parser.add_argument("-r", "--repo", action="append", help="Sync given repository (can be specifed multiple times).") parser.add_argument("--repofile", action="store", help="Read repository list from file.") args = parser.parse_args() # Setup DB connection parameters DatabaseHandler.db_name = args.db_name DatabaseHandler.db_user = args.db_user DatabaseHandler.db_pass = args.db_pass DatabaseHandler.db_host = args.db_host DatabaseHandler.db_port = args.db_port repository_controller = RepositoryController() if args.repo: for repo_url in args.repo: repository_controller.add_repository(repo_url) if args.repofile: with open(args.repofile, "r") as repo_file: for line in repo_file.readlines(): repository_controller.add_repository(line) repository_controller.store()
def test_phase_1(db_conn, caplog, monkeypatch): """Test add product and repo.""" basearch = 'x86_64' releasever = '7Server' base_url = 'http://localhost:8888/%s/%s' % (releasever, basearch) content_set = 'content_set_1' content_set_label = 'Content set 1' # Test store product. products = dict( prod1=dict(product_id=None, content_sets={content_set: { "name": content_set_label }})) prod_store = product_store.ProductStore() prod_store.store(products) monkeypatch.setattr(FileDownloadThread, '_download', download_mock) # Test store repo. rep_con = RepositoryController() rep_con.add_repository(repo_url=base_url, content_set=content_set, basearch=basearch, releasever=releasever) rep_con.import_repositories() rep_con1 = RepositoryController() rep_con1.add_db_repositories() rep_con1.store() for file in ["repomd.xml", "updateinfo.xml.gz", "primary_db.sqlite.gz"]: assert f"File {file} mock-downloaded." in caplog.messages with db_conn.cursor() as cur: cur.execute("""select * from content_set""") rows = cur.fetchall() assert len(rows) == 1 cur.execute("""select * from repo""") rows = cur.fetchall() assert len(rows) == 1 cur.execute("""select * from package""") rows = cur.fetchall() assert len(rows) == 18 cur.execute("""select * from errata_refs""") rows = cur.fetchall() assert len(rows) == 5 cur.execute("""select * from cve""") rows = cur.fetchall() assert len(rows) == 2
def run_task(*args, **kwargs): """Function to start syncing all repositories available from database.""" try: init_logging() init_db() repository_controller = RepositoryController() repository_controller.add_db_repositories() repository_controller.store() except Exception as err: # pylint: disable=broad-except msg = "Internal server error <%s>" % err.__hash__() LOGGER.exception(msg) DatabaseHandler.rollback() return "ERROR" return "OK"
import sys from repodata.repository_controller import RepositoryController if __name__ == '__main__': repository_controller = RepositoryController() for repo_url in sys.argv[1:]: repository_controller.add_repository(repo_url) repository_controller.store()