def start_docker(slug): if is_linux(): local_ip = settings.DOCKER_LINUX_IP else: local_ip = socket.gethostbyname(socket.gethostname()) command = "{} {} 1 2 {}".format(local_ip, settings.CONSOLE_SERVER_PORT, str(logging.root.level)) docker_client = DockerClient() folder = Folder(slug) copy_tree(folder.verification_folder_path(), folder.container_verification_folder_path()) docker_container = docker_client.run( slug, command, volumes={ '/opt/mission/src': folder.compiled_referee_folder_path(), '/opt/mission/envs': folder.compiled_envs_folder_path() }) for line in docker_container.logs(stream=True, logs=True): try: logging.info(line) except Exception as e: logging.error(e, exc_info=True) pass
def start_docker(slug, ref_extra_volume=None): command = "{} {} 1 2 {}".format(NAME_CLI_INTERFACE, conf.console_server_port, str(conf.log_level)) client = DockerClient() folder = Folder(slug) logging.info('Verification: {}'.format(folder.verification_folder_path())) copy_tree(folder.verification_folder_path(), folder.container_verification_folder_path()) for root, dirs, files in os.walk(folder.container_verification_folder_path()): for momo in dirs: os.chmod(os.path.join(root, momo), 0o777) for momo in files: os.chmod(os.path.join(root, momo), 0o777) volumes={ tmp_folder(folder.compiled_referee_folder_path()): { 'bind': '/opt/mission/src', 'mode': 'rw' }, tmp_folder(folder.compiled_envs_folder_path()): { 'bind': '/opt/mission/envs', 'mode': 'rw' } } if ref_extra_volume is not None: volumes.update(ref_extra_volume) return client.run(slug, command, volumes=volumes, network_mode=NAME_CLI_NETWORK, name='mission__' + slug, detach=True)
def rebuild_mission(slug): folder = Folder(slug) docker = DockerClient() verification_folder_path = folder.container_verification_folder_path() logging.info("Build docker image %s from %s", folder.image_name(), verification_folder_path) if os.path.exists(verification_folder_path): shutil.rmtree(verification_folder_path) copy_tree(folder.verification_folder_path(), verification_folder_path) docker.build(name_image=folder.image_name(), path=verification_folder_path)
def rebuild_cli_interface(slug): folder = Folder(slug) build_folder = folder.interface_cli_folder_path() img_name = folder.image_name_cli() logging.info("[interface] Build docker image %s from %s", img_name, build_folder) docker = DockerClient() try: docker.build(name_image=img_name, path=tmp_folder(build_folder)) except BuildError as e: logging.warning('Build Error:') for item in e.build_log: logging.warning(item.get('stream')) logging.warning(list(e.build_log)) logging.warning(e.msg)
def start_docker(slug): if is_linux(): local_ip = settings.DOCKER_LINUX_IP else: local_ip = socket.gethostbyname(socket.gethostname()) command = "{} {} 1 2 {}".format(local_ip, settings.CONSOLE_SERVER_PORT, str(logging.root.level)) docker_client = DockerClient() folder = Folder(slug) copy_tree(folder.verification_folder_path(), folder.container_verification_folder_path()) docker_container = docker_client.run(slug, command, volumes={ '/opt/mission/src': folder.compiled_referee_folder_path(), '/opt/mission/envs': folder.compiled_envs_folder_path() }) for line in docker_container.logs(stream=True, logs=True): try: logging.info(line) except Exception as e: logging.error(e, exc_info=True) pass
def can_check_mission(slug): folder = Folder(slug) docker = DockerClient() try: docker.images.get(folder.image_name()) docker.images.get(folder.image_name_cli()) except ImageNotFound: return False else: return True
def rebuild_mission(slug): cleanup_containers() folder = Folder(slug) docker = DockerClient() verification_folder_path = folder.container_verification_folder_path() logging.info("[mission] Build docker image %s from %s", folder.image_name(), verification_folder_path) if os.path.exists(verification_folder_path): shutil.rmtree(verification_folder_path) copy_tree(folder.verification_folder_path(), verification_folder_path) try: docker.build( name_image=folder.image_name(), path=verification_folder_path) except BuildError as e: logging.warning('Build Error:') for item in e.build_log: logging.warning(item.get('stream')) logging.warning(list(e.build_log)) logging.warning(e.msg) return rebuild_cli_interface(slug)