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)
def upload_volume(request, *args, **kwargs): """ User upload volume data, delete the original data first. """ if not (request.user and request.user.is_authenticated()): raise PermissionDenied() user = request.user assert 'pid' in kwargs pid = kwargs['pid'] assert 'pk' in kwargs id = kwargs['pk'] volume = Volume.objects.get(project__id=pid, id=id) # Check whether the user is the member of this project if not check_member_in_project(volume.project, user): raise PermissionDenied(detail="User {} is not in project {}.".format( user.username, volume.project.name)) if not request.FILES.get('file'): raise ParseError(detail="There is no upload file.") logger.info("User {} upload files to volume {}-{}.".format( user.username, volume.project.name, volume.name)) filename = get_upload_volume_filename(volume, user) save_upload_file_to_disk(request.FILES['file'], filename) client = NFSLocalClient() volume_dir = get_volume_direction_on_nfs(volume) # Clear the dir first client.removedir(volume_dir) client.makedir(volume_dir) client.copy_file_to_remote_and_untar(filename, volume_dir) remove_file_from_disk(filename) return JsonResponse({"detail": "success"})
def upload_volume(request, *args, **kwargs): """ User upload volume data, delete the original data first. """ if not (request.user and request.user.is_authenticated()): raise PermissionDenied() user = request.user assert 'pid' in kwargs pid = kwargs['pid'] assert 'pk' in kwargs id = kwargs['pk'] volume = Volume.objects.get(project__id=pid, id=id) # Check whether the user is the member of this project if not check_member_in_project(volume.project, user): raise PermissionDenied(detail="User {} is not in project {}." .format(user.username, volume.project.name)) if not request.FILES.get('file'): raise ParseError(detail="There is no upload file.") logger.info("User {} upload files to volume {}-{}.".format( user.username, volume.project.name, volume.name)) filename = get_upload_volume_filename(volume, user) save_upload_file_to_disk(request.FILES['file'], filename) client = NFSLocalClient() volume_dir = get_volume_direction_on_nfs(volume) # Clear the dir first client.removedir(volume_dir) client.makedir(volume_dir) client.copy_file_to_remote_and_untar(filename, volume_dir) remove_file_from_disk(filename) return JsonResponse({"detail": "success"})