def _get_docker_host_base_url(self): """ Returns the optimal base url of docker host. """ docker_host = get_optimal_docker_host() if not docker_host: logger.error("there is no available active docker host.") self._update_image_status(status="failed") return None return 'tcp://%s:%s' % (docker_host, str(settings.DOCKER_PORT))
def _create_image_by_imagefile(self): """ Create image by imagefile. """ logger.debug("creating an image by imagefile.") docker_host = get_optimal_docker_host() if not docker_host: logger.error("there is no available active docker host.") self._update_image_status(status="failed") return None # TODO: create image on docker host base_url = self._get_docker_host_base_url(docker_host) image_name = self._get_image_name() if self.is_image == 1: token = self._load_image_on_docker_host(base_url, self.build_file, image_name, self.image.version) elif self.is_image == 2: token = self._import_snapshot_on_docker_host( base_url, self.build_file, image_name, self.image.version) if not token: logger.error("Import image on docker host failed") self._update_image_status(status="failed") return None logger.info('Image %s:%s has been imported, with token %s', image_name, self.image.version, token) digest = self._push_image_to_registry(base_url, image_name, self.image.version, token) if not digest: logger.error("Push image from docker host to registry failed") self._update_image_status(status="failed") return None logger.info('Image %s:%s has been pushed to registry, with digest %s', image_name, self.image.version, digest) self._update_image_status(status="active", digest=digest, token=token) remove_file_from_disk(self.build_file)
def _create_image_by_dockerfile(self): """ Create image by dockerfile, this maybe take a long time. """ logger.debug("creating an image by dockerfile.") docker_host = get_optimal_docker_host() if not docker_host: logger.error("there is no available active docker host.") self._update_image_status(status="failed") return None base_url = self._get_docker_host_base_url(docker_host) image_name = self._get_image_name() logger.debug('%s %s' % (base_url, image_name)) token = self._build_image_on_docker_host( base_url=base_url, build_file=self.build_file, dockerfile=self.dockerfile, image_name=image_name, image_version=self.image.version) if not token: logger.error("Build image on docker host failed") self._update_image_status(status="failed") return None logger.info('Image %s:%s has been builded, with token %s', image_name, self.image.version, token) digest = self._push_image_to_registry(base_url, image_name, self.image.version, token) if not digest: logger.error("Push image from docker host to registry failed") self._update_image_status(status="failed") return None logger.info('Image %s:%s has been pushed to registry, with digest %s', image_name, self.image.version, digest) self._update_image_status(status="active", digest=digest, token=token) remove_file_from_disk(self.build_file)
def _create_image_by_imagefile(self): """ Create image by imagefile. """ logger.debug("creating an image by imagefile.") docker_host = get_optimal_docker_host() if not docker_host: logger.error("there is no available active docker host.") self._update_image_status(status="failed") return None # TODO: create image on docker host base_url = self._get_docker_host_base_url(docker_host) image_name = self._get_image_name() if self.is_image == 1: token = self._load_image_on_docker_host(base_url, self.build_file, image_name, self.image.version) elif self.is_image == 2: token = self._import_snapshot_on_docker_host(base_url, self.build_file, image_name, self.image.version) if not token: logger.error("Import image on docker host failed") self._update_image_status(status="failed") return None logger.info('Image %s:%s has been imported, with token %s', image_name, self.image.version, token) digest = self._push_image_to_registry(base_url, image_name, self.image.version, token) if not digest: logger.error("Push image from docker host to registry failed") self._update_image_status(status="failed") return None logger.info('Image %s:%s has been pushed to registry, with digest %s', image_name, self.image.version, digest) self._update_image_status(status="active", digest=digest, token=token) remove_file_from_disk(self.build_file)