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)
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='')
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='')
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)
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)
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
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
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))
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)
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)
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
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)
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)
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)
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()
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)
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(), }
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)
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, }