def _build_image(top_level_image: Tuple[Optional[Tuple], Tuple[str, str]]): """ Builds images bottom up, building the top level image last. :param top_level_image: representation of the top level image """ image = top_level_image images = [] # type: List[Tuple[str, str]] while image is not None: images.insert(0, image[1]) image = image[0] client = create_client() for image in images: tag = image[0] directory = "%s/%s" % (_PROJECT_ROOT, image[1]) baton_image = BatonImage(tag=tag, path=directory) build_baton_docker(client, baton_image)
def setup(self): """ Sets up the setup: builds the baton Docker image, starts the iRODS test server (if required) and creates the proxies. """ if self._state != TestWithBaton._SetupState.INIT: raise RuntimeError("Already been setup") self._state = TestWithBaton._SetupState.RUNNING docker_client = create_client() if self._baton_docker_build.docker_file is not None: # baton Docker image is to be built from a local Dockerfile logging.debug("Building baton Docker") build_baton_docker(docker_client, self._baton_docker_build) else: # Ensuring Docker image is pulled - not waiting until `docker run` to prevent Docker from polluting the # stderr if ":" in self._baton_docker_build.tag: repository, tag = self._baton_docker_build.tag.split(":") else: repository = self._baton_docker_build.tag tag = "" docker_image = docker_client.images("%s:%s" % (repository, tag), quiet=True) if len(docker_image) == 0: # Docker image doesn't exist locally: getting from DockerHub docker_client.pull(repository, tag) if self._irods_version_to_start: logging.debug("Starting iRODS test server") self.irods_server = get_static_irods_server_controller(self._irods_version_to_start).start_server() logging.debug("iRODS test server has started") else: logging.debug("Using pre-existing iRODS server") self._setup_proxies() logging.debug("Setup complete")