def main(): get_env('INFRABOX_SERVICE') get_env('INFRABOX_VERSION') get_env('INFRABOX_DATABASE_DB') get_env('INFRABOX_DATABASE_USER') get_env('INFRABOX_DATABASE_PASSWORD') get_env('INFRABOX_DATABASE_HOST') get_env('INFRABOX_DATABASE_PORT') k8s_stats = get_env('INFRABOX_STATS_KUBERNETES_ENABLED') == 'true' if k8s_stats: get_env('INFRABOX_KUBERNETES_MASTER_HOST') get_env('INFRABOX_KUBERNETES_MASTER_PORT') conn = connect_db() os.environ['REQUESTS_CA_BUNDLE'] = '/var/run/secrets/kubernetes.io/serviceaccount/ca.crt' elect_leader(conn, "stats") start_http_server(8000) while True: get_jobs(conn) get_active_resources(conn) if k8s_stats: get_k8s_stats() time.sleep(1)
def main(): get_env('INFRABOX_SERVICE') get_env('INFRABOX_VERSION') get_env('INFRABOX_DATABASE_DB') get_env('INFRABOX_DATABASE_USER') get_env('INFRABOX_DATABASE_PASSWORD') get_env('INFRABOX_DATABASE_HOST') get_env('INFRABOX_DATABASE_PORT') get_env('INFRABOX_GERRIT_PORT') get_env('INFRABOX_GERRIT_HOSTNAME') get_env('INFRABOX_GERRIT_USERNAME') get_env('INFRABOX_GERRIT_KEY_FILENAME') get_env('INFRABOX_ROOT_URL') conn = connect_db() conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) logger.info("Connected to database") elect_leader(conn, "gerrit-review") curs = conn.cursor() curs.execute("LISTEN job_update;") logger.info("Waiting for job updates") while True: is_leader(conn, "gerrit-review") if select.select([conn], [], [], 5) != ([], [], []): conn.poll() while conn.notifies: notify = conn.notifies.pop(0) logger.info(notify.payload) handle_job_update(conn, json.loads(notify.payload))
def main(): # pragma: no cover get_env('INFRABOX_VERSION') get_env('INFRABOX_DATABASE_DB') get_env('INFRABOX_DATABASE_USER') get_env('INFRABOX_DATABASE_PASSWORD') get_env('INFRABOX_DATABASE_HOST') get_env('INFRABOX_DATABASE_PORT') cluster_name = get_env('INFRABOX_CLUSTER_NAME') conn = connect_db() conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) logger.info("Connected to database") elect_leader(conn, 'github-review', cluster_name) curs = conn.cursor() curs.execute("LISTEN job_update;") logger.info("Waiting for job updates") while True: if select.select([conn], [], [], 5) != ([], [], []): conn.poll() while conn.notifies: notify = conn.notifies.pop(0) if not is_leader( conn, 'github-review', cluster_name, exit=False): continue handle_job_update(conn, json.loads(notify.payload))
def main(): # pragma: no cover get_env('INFRABOX_VERSION') get_env('INFRABOX_DATABASE_DB') get_env('INFRABOX_DATABASE_USER') get_env('INFRABOX_DATABASE_PASSWORD') get_env('INFRABOX_DATABASE_HOST') get_env('INFRABOX_DATABASE_PORT') cluster_name = get_env('INFRABOX_CLUSTER_NAME') conn = connect_db() conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) logger.info("Connected to database") elect_leader(conn, 'github-review', cluster_name) curs = conn.cursor() curs.execute("LISTEN job_update;") logger.info("Waiting for job updates") pool = eventlet.GreenPool() while True: trampoline(conn, read=True) conn.poll() while conn.notifies: notify = conn.notifies.pop(0) event = json.loads(notify.payload) if not is_leader(conn, 'github-review', cluster_name, exit=False): logger.info("skip job: %s because I'm not leader", event.get('job_id')) continue pool.spawn_n(handle, event)
def main(): # Arguments parser = argparse.ArgumentParser(prog="scheduler.py") parser.add_argument("--docker-registry", required=True, type=str, help="Host for the registry to use") parser.add_argument("--loglevel", choices=['debug', 'info', 'warning'], help="Log level") parser.add_argument("--tag", required=True, type=str, help="Image tag to use for internal images") args = parser.parse_args() get_env('INFRABOX_SERVICE') get_env('INFRABOX_VERSION') get_env('INFRABOX_DATABASE_DB') get_env('INFRABOX_DATABASE_USER') get_env('INFRABOX_DATABASE_PASSWORD') get_env('INFRABOX_DATABASE_HOST') get_env('INFRABOX_DATABASE_PORT') get_env('INFRABOX_DASHBOARD_URL') get_env('INFRABOX_DOCKER_REGISTRY_URL') get_env('INFRABOX_GENERAL_NO_CHECK_CERTIFICATES') get_env('INFRABOX_GENERAL_WORKER_NAMESPACE') get_env('INFRABOX_JOB_API_URL') get_env('INFRABOX_JOB_API_SECRET') get_env('INFRABOX_JOB_MAX_OUTPUT_SIZE') get_env('INFRABOX_JOB_MOUNT_DOCKER_SOCKET') get_env('INFRABOX_JOB_SECURITY_CONTEXT_CAPABILITIES_ENABLED') if get_env('INFRABOX_GERRIT_ENABLED') == 'true': get_env('INFRABOX_GERRIT_USERNAME') get_env('INFRABOX_GERRIT_HOSTNAME') get_env('INFRABOX_GERRIT_PORT') # try to read from filesystem with open('/var/run/secrets/kubernetes.io/serviceaccount/token', 'r') as f: args.token = f.read() args.api_server = "https://" + get_env('INFRABOX_KUBERNETES_MASTER_HOST') \ + ":" + get_env('INFRABOX_KUBERNETES_MASTER_PORT') os.environ[ 'REQUESTS_CA_BUNDLE'] = '/var/run/secrets/kubernetes.io/serviceaccount/ca.crt' conn = connect_db() conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) elect_leader(conn, "scheduler") start_http_server(8000) scheduler = Scheduler(conn, args) scheduler.run()
def main(): get_env('INFRABOX_VERSION') get_env('INFRABOX_DATABASE_DB') get_env('INFRABOX_DATABASE_USER') get_env('INFRABOX_DATABASE_PASSWORD') get_env('INFRABOX_DATABASE_HOST') get_env('INFRABOX_DATABASE_PORT') get_env('INFRABOX_GERRIT_PORT') get_env('INFRABOX_GERRIT_HOSTNAME') get_env('INFRABOX_GERRIT_USERNAME') get_env('INFRABOX_GERRIT_KEY_FILENAME') cluster_name = get_env('INFRABOX_CLUSTER_NAME') conn = connect_db() conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) logger.info("Connected to database") elect_leader(conn, 'gerrit-review', cluster_name) curs = conn.cursor() curs.execute("LISTEN job_update;") logger.info("Waiting for job updates") while True: if not is_active(conn, cluster_name): logger.info("cluster is inactive or disabled, sleeping") time.sleep(5) continue is_leader(conn, 'gerrit-review', cluster_name) curs.execute('commit;') while conn.notifies: notify = conn.notifies.pop(0) logger.debug("got notify: %s" % notify.payload) handle_job_update(conn, json.loads(notify.payload)) time.sleep(3)
def main(): get_env('INFRABOX_SERVICE') get_env('INFRABOX_VERSION') get_env('INFRABOX_DATABASE_DB') get_env('INFRABOX_DATABASE_USER') get_env('INFRABOX_DATABASE_PASSWORD') get_env('INFRABOX_DATABASE_HOST') get_env('INFRABOX_DATABASE_PORT') gerrit_port = int(get_env('INFRABOX_GERRIT_PORT')) gerrit_hostname = get_env('INFRABOX_GERRIT_HOSTNAME') gerrit_username = get_env('INFRABOX_GERRIT_USERNAME') gerrit_key_filename = get_env('INFRABOX_GERRIT_KEY_FILENAME') conn = connect_db() logger.info("Connected to db") elect_leader(conn, "gerrit-trigger") client = paramiko.SSHClient() client.load_system_host_keys() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(username=gerrit_username, hostname=gerrit_hostname, port=gerrit_port, key_filename=gerrit_key_filename) client.get_transport().set_keepalive(60) logger.info("Connected to gerrit") _, stdout, _ = client.exec_command('gerrit stream-events') logger.info("Waiting for stream-events") for line in stdout: event = json.loads(line) if event['type'] == "patchset-created": logger.info(json.dumps(event, indent=4)) handle_patchset_created(conn, event)