Exemplo n.º 1
0
 def post(self, request):
     form, error = JsonParser(
         Argument('id', type=int, required=False),
         Argument('app_id', type=int, help='请选择应用'),
         Argument('env_id', type=int, help='请选择环境'),
         Argument('host_ids', type=list, filter=lambda x: len(x), help='请选择要部署的主机'),
         Argument('extend', filter=lambda x: x in dict(Deploy.EXTENDS), help='请选择发布类型'),
         Argument('is_audit', type=bool, default=False)
     ).parse(request.body)
     if error is None:
         deploy = Deploy.objects.filter(app_id=form.app_id, env_id=form.env_id).first()
         if deploy and deploy.id != form.id:
             return json_response(error='应用在该环境下已经存在发布配置')
         form.host_ids = json.dumps(form.host_ids)
         if form.extend == '1':
             extend_form, error = JsonParser(
                 Argument('git_repo', handler=str.strip, help='请输入git仓库地址'),
                 Argument('dst_dir', handler=str.strip, help='请输入发布目标路径'),
                 Argument('dst_repo', handler=str.strip, help='请输入目标仓库路径'),
                 Argument('versions', type=int, help='请输入保留历史版本数量'),
                 Argument('filter_rule', type=dict, help='参数错误'),
                 Argument('custom_envs', handler=str.strip, required=False),
                 Argument('hook_pre_server', handler=str.strip, default=''),
                 Argument('hook_post_server', handler=str.strip, default=''),
                 Argument('hook_pre_host', handler=str.strip, default=''),
                 Argument('hook_post_host', handler=str.strip, default='')
             ).parse(request.body)
             if error:
                 return json_response(error=error)
             extend_form.filter_rule = json.dumps(extend_form.filter_rule)
             extend_form.custom_envs = json.dumps(parse_envs(extend_form.custom_envs))
             if form.id:
                 Deploy.objects.filter(pk=form.id).update(**form)
                 DeployExtend1.objects.filter(deploy_id=form.id).update(**extend_form)
             else:
                 deploy = Deploy.objects.create(created_by=request.user, **form)
                 DeployExtend1.objects.create(deploy=deploy, **extend_form)
         elif form.extend == '2':
             extend_form, error = JsonParser(
                 Argument('server_actions', type=list, help='请输入执行动作'),
                 Argument('host_actions', type=list, help='请输入执行动作')
             ).parse(request.body)
             if error:
                 return json_response(error=error)
             if len(extend_form.server_actions) + len(extend_form.host_actions) == 0:
                 return json_response(error='请至少设置一个执行的动作')
             extend_form.server_actions = json.dumps(extend_form.server_actions)
             extend_form.host_actions = json.dumps(extend_form.host_actions)
             if form.id:
                 Deploy.objects.filter(pk=form.id).update(**form)
                 DeployExtend2.objects.filter(deploy_id=form.id).update(**extend_form)
             else:
                 deploy = Deploy.objects.create(created_by=request.user, **form)
                 DeployExtend2.objects.create(deploy=deploy, **extend_form)
     return json_response(error=error)
Exemplo n.º 2
0
 def post(self, request):
     form, error = JsonParser(
         Argument('id', type=int, required=False),
         Argument('app_id', type=int, help='请选择应用'),
         Argument('env_id', type=int, help='请选择环境'),
         Argument('host_ids', type=list, filter=lambda x: len(x), help='请选择要部署的主机'),
         Argument('rst_notify', type=dict, help='请选择发布结果通知方式'),
         Argument('extend', filter=lambda x: x in dict(Deploy.EXTENDS), help='请选择发布类型'),
         Argument('is_parallel', type=bool, default=True),
         Argument('is_audit', type=bool, default=False)
     ).parse(request.body)
     if error is None:
         deploy = Deploy.objects.filter(app_id=form.app_id, env_id=form.env_id).first()
         if deploy and deploy.id != form.id:
             return json_response(error='应用在该环境下已经存在发布配置')
         form.host_ids = json.dumps(form.host_ids)
         form.rst_notify = json.dumps(form.rst_notify)
         if form.extend == '1':
             extend_form, error = JsonParser(
                 Argument('git_repo', handler=str.strip, help='请输入git仓库地址'),
                 Argument('dst_dir', handler=str.strip, help='请输入发布部署路径'),
                 Argument('dst_repo', handler=str.strip, help='请输入发布存储路径'),
                 Argument('versions', type=int, filter=lambda x: x > 0, help='请输入发布保留版本数量'),
                 Argument('filter_rule', type=dict, help='参数错误'),
                 Argument('hook_pre_server', handler=str.strip, default=''),
                 Argument('hook_post_server', handler=str.strip, default=''),
                 Argument('hook_pre_host', handler=str.strip, default=''),
                 Argument('hook_post_host', handler=str.strip, default='')
             ).parse(request.body)
             if error:
                 return json_response(error=error)
             extend_form.dst_dir = extend_form.dst_dir.rstrip('/')
             extend_form.filter_rule = json.dumps(extend_form.filter_rule)
             if form.id:
                 extend = DeployExtend1.objects.filter(deploy_id=form.id).first()
                 if extend.git_repo != extend_form.git_repo:
                     remove_repo(form.id)
                 Deploy.objects.filter(pk=form.id).update(**form)
                 DeployExtend1.objects.filter(deploy_id=form.id).update(**extend_form)
             else:
                 deploy = Deploy.objects.create(created_by=request.user, **form)
                 DeployExtend1.objects.create(deploy=deploy, **extend_form)
         elif form.extend == '2':
             extend_form, error = JsonParser(
                 Argument('server_actions', type=list, help='请输入执行动作'),
                 Argument('host_actions', type=list, help='请输入执行动作')
             ).parse(request.body)
             if error:
                 return json_response(error=error)
             if len(extend_form.server_actions) + len(extend_form.host_actions) == 0:
                 return json_response(error='请至少设置一个执行的动作')
             extend_form.require_upload = any(x.get('src_mode') == '1' for x in extend_form.host_actions)
             extend_form.server_actions = json.dumps(extend_form.server_actions)
             extend_form.host_actions = json.dumps(extend_form.host_actions)
             if form.id:
                 Deploy.objects.filter(pk=form.id).update(**form)
                 DeployExtend2.objects.filter(deploy_id=form.id).update(**extend_form)
             else:
                 deploy = Deploy.objects.create(created_by=request.user, **form)
                 DeployExtend2.objects.create(deploy=deploy, **extend_form)
     return json_response(error=error)