users.py 文件源码

python
阅读 28 收藏 0 点赞 0 评论 0

项目:kuberdock-platform 作者: cloudlinux 项目源码 文件源码
def delete(self, user, force=False):
        """Release all user's resources and mark user as deleted.

        :param user: user id, username or kuberdock.users.models.User object
        :param force: if True, will not raise ResourceReleaseError
        :raises ResourceReleaseError: if couldn't release some resources
        :raises APIError: if user was not found
        """
        user = self._convert_user(user)
        self._is_deletable(user, raise_=True)
        uid = user.id
        user.logout(commit=False)

        pod_collection = PodCollection(user)
        for pod in pod_collection.get(as_json=False):
            pod_collection.delete(pod['id'])
        # Now, when we have deleted all pods, events will rape db session a
        # little bit.
        # Get new, clean user instance to prevent a lot of various SA errors
        user = User.get(uid)

        # Add some delay for deleting drives to allow kubernetes unmap drives
        # after a pod was deleted. Also in some cases this delay is not enough,
        # for example DBMS in container may save data to PD for a long time.
        # So there is a regular procedure to clean such undeleted drives
        # tasks.clean_drives_for_deleted_users.
        for pd in user.persistent_disks:
            PersistentStorage.end_stat(pd.name, user.id)
        delete_persistent_drives_task.apply_async(
            ([pd.id for pd in user.persistent_disks],),
            countdown=10
        )
        prefix = '__' + generate()
        user.username += prefix
        user.email += prefix
        user.deleted = True
        try:
            db.session.commit()
        except (IntegrityError, InvalidRequestError), e:
            db.session.rollback()
            raise APIError('Cannot delete a user: {0}'.format(str(e)), 500)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号