Пример #1
0
 def post(self, request):
     form, error = JsonParser(
         Argument('id', type=int, required=False),
         Argument('deploy_id', type=int, help='缺少必要参数'),
         Argument('name', help='请输申请标题'),
         Argument('extra', type=list, help='缺少必要参数'),
         Argument('host_ids',
                  type=list,
                  filter=lambda x: len(x),
                  help='请选择要部署的主机'),
         Argument('desc', required=False),
     ).parse(request.body)
     req_id = None
     if error is None:
         deploy = Deploy.objects.filter(pk=form.deploy_id).first()
         if not deploy:
             return json_response(error='未找到该发布配置')
         if form.extra[0] == 'tag' and not form.extra[1]:
             return json_response(error='请选择要发布的Tag')
         if form.extra[0] == 'branch' and not form.extra[2]:
             return json_response(error='请选择要发布的分支及Commit ID')
         if deploy.extend == '2':
             if form.extra[0]:
                 form.extra[0] = form.extra[0].replace("'", '')
             if DeployExtend2.objects.filter(
                     deploy=deploy,
                     host_actions__contains='"src_mode": "1"').exists():
                 if len(form.extra) < 2:
                     return json_response(
                         error='该应用的发布配置中使用了数据传输动作且设置为发布时上传,请上传要传输的数据')
                 form.version = form.extra[1].get('path')
         form.name = form.name.replace("'", '')
         form.status = '0' if deploy.is_audit else '1'
         form.extra = json.dumps(form.extra)
         form.host_ids = json.dumps(form.host_ids)
         if form.id:
             req = DeployRequest.objects.get(pk=form.id)
             is_required_notify = deploy.is_audit and req.status == '-1'
             DeployRequest.objects.filter(pk=form.id).update(
                 created_by=request.user, reason=None, **form)
         else:
             req = DeployRequest.objects.create(created_by=request.user,
                                                **form)
             req_id = req.id
             is_required_notify = deploy.is_audit
         if is_required_notify:
             Thread(target=Helper.send_deploy_notify,
                    args=(req, 'approve_req')).start()
     if req_id is None:
         return json_response(error=error)
     else:
         return json_response({'id': req_id})
Пример #2
0
def post_request_ext2(request):
    form, error = JsonParser(
        Argument('id', type=int, required=False),
        Argument('deploy_id', type=int, help='缺少必要参数'),
        Argument('name', help='请输申请标题'),
        Argument('host_ids',
                 type=list,
                 filter=lambda x: len(x),
                 help='请选择要部署的主机'),
        Argument('extra', type=dict, required=False),
        Argument('version', default=''),
        Argument('type', default='1'),
        Argument('plan', required=False),
        Argument('desc', required=False),
    ).parse(request.body)
    if error is None:
        deploy = Deploy.objects.filter(pk=form.deploy_id).first()
        if not deploy:
            return json_response(error='未找到该发布配置')
        extra = form.pop('extra')
        if DeployExtend2.objects.filter(
                deploy=deploy,
                host_actions__contains='"src_mode": "1"').exists():
            if not extra:
                return json_response(
                    error='该应用的发布配置中使用了数据传输动作且设置为发布时上传,请上传要传输的数据')
            form.spug_version = extra['path']
            form.extra = json.dumps(extra)
        else:
            form.spug_version = Repository.make_spug_version(deploy.id)
        form.name = form.name.replace("'", '')
        form.status = '0' if deploy.is_audit else '1'
        form.host_ids = json.dumps(form.host_ids)
        if form.id:
            req = DeployRequest.objects.get(pk=form.id)
            is_required_notify = deploy.is_audit and req.status == '-1'
            DeployRequest.objects.filter(pk=form.id).update(
                created_by=request.user, reason=None, **form)
        else:
            req = DeployRequest.objects.create(created_by=request.user, **form)
            is_required_notify = deploy.is_audit
        if is_required_notify:
            Thread(target=Helper.send_deploy_notify,
                   args=(req, 'approve_req')).start()
    return json_response(error=error)
Пример #3
0
 def post(self, request):
     form, error = JsonParser(Argument('id', type=int, required=False),
                              Argument('name', help='请输入服务名称'),
                              Argument('key', help='请输入唯一标识符'),
                              Argument('desc',
                                       required=False)).parse(request.body)
     if error is None:
         form.name = form.name.replace("'", '')
         app = App.objects.filter(key=form.key).first()
         if app and app.id != form.id:
             return json_response(error=f'唯一标识符 {form.key} 已存在,请更改后重试')
         if form.id:
             App.objects.filter(pk=form.id).update(**form)
         else:
             app = App.objects.create(created_by=request.user, **form)
             if request.user.role:
                 request.user.role.add_deploy_perm('apps', app.id)
     return json_response(error=error)