Пример #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)
     if error is None:
         deploy = Deploy.objects.filter(pk=form.deploy_id).first()
         if not deploy:
             return json_response(error='未找到该发布配置')
         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:
             DeployRequest.objects.filter(pk=form.id).update(
                 created_by=request.user, reason=None, **form)
         else:
             DeployRequest.objects.create(created_by=request.user, **form)
     return json_response(error=error)
Пример #2
0
def post_request_ext1_rollback(request):
    form, error = JsonParser(
        Argument('request_id', type=int, help='请选择要回滚的版本'),
        Argument('name', help='请输入申请标题'),
        Argument('host_ids',
                 type=list,
                 filter=lambda x: len(x),
                 help='请选择要部署的主机'),
        Argument('desc', required=False),
    ).parse(request.body)
    if error is None:
        req = DeployRequest.objects.get(pk=form.pop('request_id'))
        requests = DeployRequest.objects.filter(deploy=req.deploy,
                                                status__in=('3', '-3'))
        versions = list({x.spug_version: 1 for x in requests}.keys())
        if req.spug_version not in versions[:req.deploy.extend_obj.versions +
                                            1]:
            return json_response(
                error='选择的版本超出了发布配置中设置的版本数量,无法快速回滚,可通过新建发布申请选择构建仓库里的该版本再次发布。')

        form.status = '0' if req.deploy.is_audit else '1'
        form.host_ids = json.dumps(sorted(form.host_ids))
        new_req = DeployRequest.objects.create(deploy_id=req.deploy_id,
                                               repository_id=req.repository_id,
                                               type='2',
                                               extra=req.extra,
                                               version=req.version,
                                               spug_version=req.spug_version,
                                               created_by=request.user,
                                               **form)
        if req.deploy.is_audit:
            Thread(target=Helper.send_deploy_notify,
                   args=(new_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('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})
Пример #4
0
def post_request_ext1(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('type', default='1'),
        Argument('plan', required=False),
        Argument('desc', required=False),
    ).parse(request.body)
    if error is None:
        deploy = Deploy.objects.get(pk=form.deploy_id)
        form.spug_version = Repository.make_spug_version(deploy.id)
        if form.extra[0] == 'tag':
            if not form.extra[1]:
                return json_response(error='请选择要发布的版本')
            form.version = form.extra[1]
        elif form.extra[0] == 'branch':
            if not form.extra[2]:
                return json_response(error='请选择要发布的分支及Commit ID')
            form.version = f'{form.extra[1]}#{form.extra[2][:6]}'
        elif form.extra[0] == 'repository':
            if not form.extra[1]:
                return json_response(error='请选择要发布的版本')
            repository = Repository.objects.get(pk=form.extra[1])
            form.repository_id = repository.id
            form.version = repository.version
            form.spug_version = repository.spug_version
            form.extra = ['repository'] + json.loads(repository.extra)
        else:
            return json_response(error='参数错误')

        form.extra = json.dumps(form.extra)
        form.status = '0' if deploy.is_audit else '1'
        form.host_ids = json.dumps(sorted(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)
Пример #5
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)
Пример #6
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)
     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')
         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)
             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)