示例#1
0
    def put(self, project_id, action=None):
        """
        update project
        /project/<int:id>

        :return:
        """
        super(ProjectAPI, self).put()

        if action and action == 'members':
            return self.members(project_id, members=json.loads(request.data.decode('utf-8')))

        form = ProjectForm(request.form, csrf=False)
        form.set_id(project_id)
        if form.validate_on_submit():
            server = ProjectModel().get_by_id(project_id)
            repo_url_origin = server.repo_url
            data = form.form2dict()
            # a new type to update a model
            ret = server.update(data)
            # maybe sth changed by git
            if repo_url_origin != data['repo_url']:
                dir_codebase_project = current_app.config.get('CODE_BASE') + str(project_id)
                if os.path.exists(dir_codebase_project):
                    shutil.rmtree(dir_codebase_project)

            return self.render_json(data=server.item())
        else:
            return self.render_error(code=Code.form_error, message=form.errors)
示例#2
0
    def delete(self, project_id):
        """
        remove an project
        /project/<int:id>

        :return:
        """
        super(ProjectAPI, self).delete()

        project_model = ProjectModel(id=project_id)
        project_model.remove(project_id)

        return self.render_json(message='')
示例#3
0
    def delete(self, project_id):
        """
        remove an environment
        /environment/<int:id>

        :return:
        """
        super(ProjectAPI, self).delete()

        project_model = ProjectModel(id=project_id)
        project_model.remove(project_id)

        return self.render_json(message='')
示例#4
0
    def copy(self, project_id):
        """

        :param project_id:
        :return:
        """
        project = ProjectModel.get_by_id(project_id).to_dict()
        project['id'] = None
        project['name'] = project['name'] + '-copy'
        project_new = ProjectModel()
        project_new_info = project_new.add(dict(project))

        return self.render_json(data=project_new_info)
示例#5
0
    def create(self):
        form = ProjectForm(request.form, csrf=False)
        if form.validate_on_submit():
            # add project
            project = ProjectModel()
            data = form.form2dict()
            project_new = project.add(data)
            if not project_new:
                return self.render_json(code=-1)

            return self.render_json(data=project_new)
        else:
            return self.render_error(code=Code.form_error, message=form.errors)
示例#6
0
    def __init__(self, task_id=None, project_id=None, console=False):
        self.local_codebase = current_app.config.get('CODE_BASE')
        self.localhost = Waller(host='127.0.0.1')
        self.TaskRecord = RecordModel()

        if task_id:
            self.task_id = task_id
            # task start
            current_app.logger.info(self.task_id)
            self.taskMdl = TaskModel().item(self.task_id)
            self.user_id = self.taskMdl.get('user_id')
            self.servers = self.taskMdl.get('servers_info')
            self.project_info = self.taskMdl.get('project_info')

        if project_id:
            self.project_id = project_id
            self.project_info = ProjectModel(id=project_id).item()
            self.servers = self.project_info['servers_info']

        self.project_name = self.project_info['id']
        self.dir_codebase_project = self.local_codebase + str(self.project_name)

        # self.init_repo()

        # start to deploy
        self.console = console
示例#7
0
    def __init__(self, task_id=None, project_id=None, console=False):
        self.local_codebase = current_app.config.get('CODE_BASE')
        self.local = Waller(
            host=current_app.config.get('LOCAL_SERVER_HOST'),
            user=current_app.config.get('LOCAL_SERVER_USER'),
            port=current_app.config.get('LOCAL_SERVER_PORT'),
        )
        self.TaskRecord = RecordModel()

        if task_id:
            self.task_id = task_id
            # task start
            current_app.logger.info(self.task_id)
            self.taskMdl = TaskModel().item(self.task_id)
            self.user_id = self.taskMdl.get('user_id')
            self.servers = self.taskMdl.get('servers_info')
            self.task = self.taskMdl.get('target_user')
            self.project_info = self.taskMdl.get('project_info')

        if project_id:
            self.project_id = project_id
            self.project_info = ProjectModel(id=project_id).item()

        self.project_name = self.project_info['id']
        self.dir_codebase_project = self.local_codebase + str(
            self.project_name)

        self.init_repo()

        # start to deploy
        self.console = console
示例#8
0
    def item(self, project_id):
        """
        获取某个用户组

        :param id:
        :return:
        """

        project_model = ProjectModel(id=project_id)
        project_info = project_model.item()
        if not project_info:
            return self.render_json(code=-1)

        group_info = MemberModel().members(project_id=project_id)
        current_app.logger.info(group_info)

        return self.render_json(data=dict(project_info, **group_info))
示例#9
0
    def item(self, project_id):
        """
        获取某个用户组

        :param id:
        :return:
        """

        project_model = ProjectModel(id=project_id)
        project_info = project_model.item()
        if not project_info:
            return self.render_json(code=-1)

        project_info['members'], count, project_info[
            'user_uids'] = MemberModel().members(project_id=project_id)

        return self.render_json(data=project_info)
示例#10
0
    def list(self):
        """
        fetch project list

        :return:
        """
        page = int(request.args.get('page', 0))
        page = page - 1 if page else 0
        size = int(request.args.get('size', 10))
        kw = request.values.get('kw', '')
        environment_id = request.values.get('environment_id', '')

        project_model = ProjectModel()
        project_list, count = project_model.list(page=page, size=size, kw=kw, environment_id=environment_id,
                                                 space_id=self.space_id)
        return self.list_json(list=project_list, count=count,
                              enable_create=permission.role_upper_master() and current_user.role != SUPER)
示例#11
0
    def __init__(self, task_id=None, project_id=None, console=False):
        self.local_codebase = current_app.config.get('CODE_BASE').rstrip('/') + '/'
        self.localhost = Waller(host='127.0.0.1')
        self.TaskRecord = RecordModel()

        if task_id:
            self.task_id = task_id
            # task start
            current_app.logger.info(self.task_id)
            self.taskMdl = TaskModel().item(self.task_id)
            self.user_id = self.taskMdl.get('user_id')
            self.servers = self.taskMdl.get('servers_info')
            self.project_info = self.taskMdl.get('project_info')

            # copy to a local version
            self.release_version = '{project_id}_{task_id}_{timestamp}'.format(
                project_id=self.project_info['id'],
                task_id=self.task_id,
                timestamp=time.strftime('%Y%m%d_%H%M%S', time.localtime(time.time())),
            )
            current_app.logger.info(self.taskMdl)

            self.custom_global_env = {
                'WEBROOT': str(self.project_info['target_root']),
                'VERSION': str(self.release_version),
                'CURRENT_RELEASE': str(self.project_info['target_releases']),
                'BRANCH': str(self.taskMdl.get('branch')),
                'TAG': str(self.taskMdl.get('tag')),
                'COMMIT_ID': str(self.taskMdl.get('commit_id')),
                'PROJECT_NAME': str(self.project_info['name']).replace('"', '').replace("'", '').replace(" ", '_'),
                'PROJECT_ID': str(self.project_info['id']),
                'TASK_NAME': str(self.taskMdl.get('name')).replace('"', '').replace("'", '').replace(" ", '_'),
                'TASK_ID': str(self.task_id),
                'DEPLOY_USER': str(self.taskMdl.get('user_name')),
                'DEPLOY_TIME': str(time.strftime('%Y%m%d-%H:%M:%S', time.localtime(time.time()))),
            }
            if self.project_info['task_vars']:
                task_vars = [i.strip() for i in self.project_info['task_vars'].split('\n') if i.strip() and not i.strip().startswith('#')]
                for var in task_vars:
                    var_list = var.split('=', 1)
                    if len(var_list) != 2:
                        continue
                    self.custom_global_env[var_list[0]] = var_list[1]

            self.localhost.init_env(env=self.custom_global_env)

        if project_id:
            self.project_id = project_id
            self.project_info = ProjectModel(id=project_id).item()
            self.servers = self.project_info['servers_info']

        self.project_name = self.project_info['id']
        self.dir_codebase_project = self.local_codebase + str(self.project_name)

        # self.init_repo()

        # start to deploy
        self.console = console
示例#12
0
    def item(self, project_id):
        """
        获取某个用户组

        :param id:
        :return:
        """

        project_model = ProjectModel(id=project_id)
        current_app.logger.info(project_id)
        project_info = project_model.item(id=project_id)
        current_app.logger.info(project_info)
        if not project_info:
            return self.render_json(code=-1)

        project_info['members'], count, project_info['user_uids'] = MemberModel().members(project_id=project_id)

        return self.render_json(data=project_info)
示例#13
0
    def post(self):
        """
        create a project
        /environment/

        :return:
        """
        super(ProjectAPI, self).post()

        form = ProjectForm(request.form, csrf_enabled=False)
        if form.validate_on_submit():
            project_new = ProjectModel()
            data = form.form2dict()
            id = project_new.add(data)
            if not id:
                return self.render_json(code=-1)

            return self.render_json(data=project_new.item())
        else:
            return self.render_json(code=-1, message=form.errors)
示例#14
0
    def put(self, project_id, action=None):
        """
        update environment
        /environment/<int:id>

        :return:
        """
        super(ProjectAPI, self).put()

        if action and action == 'members':
            return self.members(project_id, members=json.loads(request.data))

        form = ProjectForm(request.form, csrf_enabled=False)
        form.set_id(project_id)
        if form.validate_on_submit():
            server = ProjectModel().get_by_id(project_id)
            data = form.form2dict()
            # a new type to update a model
            ret = server.update(data)
            return self.render_json(data=server.item())
        else:
            return self.render_json(code=-1, message=form.errors)
示例#15
0
    def __init__(self, task_id=None, project_id=None, console=False):
        self.local = Waller(host=current_app.config.get('LOCAL_SERVER_HOST'),
                            user=current_app.config.get('LOCAL_SERVER_USER'),
                            port=current_app.config.get('LOCAL_SERVER_PORT'))
        self.TaskRecord = RecordModel()

        if task_id:
            self.task_id = task_id
            self.taskMdl = TaskModel().item(self.task_id)
            self.user_id = self.taskMdl.get('user_id')
            self.servers = self.taskMdl.get('servers_info')
            self.task = self.taskMdl.get('target_user')
            self.project_info = self.taskMdl.get('project_info')
        if project_id:
            self.project_id = project_id
            self.project_info = ProjectModel(id=project_id).item()
示例#16
0
    def post(self):
        """
        create a task
        /task/
        :return:
        """
        super(TaskAPI, self).post()

        form = TaskForm(request.form, csrf=False)
        if form.validate_on_submit():
            task_new = TaskModel()
            data = form.form2dict()
            task_new_info = task_new.add(data)
            if not task_new_info:
                return self.render_json(code=-1)

            # 待审核
            try:
                if task_new_info['status'] == TaskModel.status_new:
                    project_info = ProjectModel(
                        id=task_new_info['project_id']).item()
                    space_id = project_info['space_id']
                    space_info = SpaceModel(id=space_id).item()
                    task_url = Notice.task_url(
                        project_space=space_info['name'],
                        task_id=task_new_info['id'])
                    notice_info = {
                        'title': '新上线单需要审核',
                        'username': current_user.username,
                        'project_name': project_info['name'],
                        'task_id': task_new_info['id'],
                        'task_url': task_url,
                        'task_name': task_new_info['name'],
                        'branch': task_new_info['branch'],
                        'commit': task_new_info['commit_id'],
                        'tag': task_new_info['tag'],
                        'repo_mode': project_info['repo_mode'],
                    }
                    Notice.create(Notice.by_dingding).audit_task(
                        project_info, notice_info)
            except:
                pass

            return self.render_json(data=task_new_info)
        else:
            return self.render_error(code=Code.form_error, message=form.errors)
示例#17
0
 def form2dict(self):
     project_info = ProjectModel(id=self.project_id.data).item()
     task_status = TaskModel.status_new if project_info[
         'task_audit'] == ProjectModel.task_audit_true else TaskModel.status_pass
     return {
         'name':
         self.name.data.replace('"', '').replace("'", ''),
         'user_id':
         current_user.id,
         'user_name':
         current_user.username,
         'project_id':
         self.project_id.data,
         # todo default value
         'action':
         0,
         'status':
         task_status,
         'link_id':
         '',
         'ex_link_id':
         '',
         'servers':
         self.servers.data if self.servers.data else '',
         'commit_id':
         self.commit_id.data if self.commit_id.data else '',
         'tag':
         self.tag.data if self.tag.data else '',
         'branch':
         self.branch.data if self.branch.data else '',
         'file_transmission_mode':
         self.file_transmission_mode.data
         if self.file_transmission_mode.data else 0,
         'file_list':
         self.file_list.data if self.file_list.data else '',
         'is_rollback':
         0,
         'created_at':
         datetime.now(),
         'updated_at':
         datetime.now(),
     }
示例#18
0
    def __init__(self, task_id=None, project_id=None, console=False):
        self.local = Waller(host=current_app.config.get('LOCAL_SERVER_HOST'),
                            user=current_app.config.get('LOCAL_SERVER_USER'),
                            port=current_app.config.get('LOCAL_SERVER_PORT'))
        self.TaskRecord = RecordModel()

        if task_id:
            self.task_id = task_id
            # task start
            TaskModel(id=self.task_id).update(status=TaskModel.status_doing)

            self.taskMdl = TaskModel().item(self.task_id)
            self.user_id = self.taskMdl.get('user_id')
            self.servers = self.taskMdl.get('servers_info')
            self.task = self.taskMdl.get('target_user')
            self.project_info = self.taskMdl.get('project_info')

        if project_id:
            self.project_id = project_id
            self.project_info = ProjectModel(id=project_id).item()

        self.project_name = self.project_info['id']
        self.dir_codebase_project = self.dir_codebase + str(self.project_name)
示例#19
0
 def form2dict(self):
     project_info = ProjectModel(id=self.project_id.data).item()
     task_status = TaskModel.status_new if project_info[
         'task_audit'] == ProjectModel.task_audit_true else TaskModel.status_pass
     return {
         'name':
         self.name.data if self.name.data else '',
         # todo
         'user_id':
         1,
         'project_id':
         self.project_id.data,
         # todo default value
         'action':
         0,
         'status':
         task_status,
         'link_id':
         '',
         'ex_link_id':
         '',
         'servers':
         self.servers.data if self.servers.data else '',
         'commit_id':
         self.commit_id.data if self.commit_id.data else '',
         'tag':
         self.tag.data if self.tag.data else '',
         'branch':
         self.branch.data if self.branch.data else '',
         'file_transmission_mode':
         self.file_transmission_mode.data
         if self.file_transmission_mode.data else 0,
         'file_list':
         self.file_list.data if self.file_list.data else '',
         'enable_rollback':
         1,
     }