Example #1
0
    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)
Example #2
0
    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)
Example #3
0
    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)
Example #4
0
    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)
Example #5
0
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"})
Example #6
0
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"})