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)
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)