Exemplo n.º 1
0
Arquivo: views.py Projeto: zerlee/spug
 def post(self, request):
     form, error = JsonParser(
         Argument('id', type=int, required=False),
         Argument('type', help='请输入任务类型'),
         Argument('name', help='请输入任务名称'),
         Argument('command', help='请输入任务内容'),
         Argument('rst_notify', type=dict, help='请选择执行失败通知方式'),
         Argument('targets',
                  type=list,
                  filter=lambda x: len(x),
                  help='请选择执行对象'),
         Argument('trigger',
                  filter=lambda x: x in dict(Task.TRIGGERS),
                  help='请选择触发器类型'),
         Argument('trigger_args', help='请输入触发器参数'),
         Argument('desc', required=False),
     ).parse(request.body)
     if error is None:
         form.targets = json.dumps(form.targets)
         form.rst_notify = json.dumps(form.rst_notify)
         if form.trigger == 'cron':
             args = json.loads(form.trigger_args)['rule'].split()
             if len(args) != 5:
                 return json_response(error='无效的执行规则,请更正后再试')
             minute, hour, day, month, week = args
             week = '0' if week == '7' else week
             try:
                 CronTrigger(minute=minute,
                             hour=hour,
                             day=day,
                             month=month,
                             day_of_week=week)
             except ValueError:
                 return json_response(error='无效的执行规则,请更正后再试')
         if form.id:
             Task.objects.filter(pk=form.id).update(
                 updated_at=human_datetime(),
                 updated_by=request.user,
                 **form)
             task = Task.objects.filter(pk=form.id).first()
             if task and task.is_active:
                 form.action = 'modify'
                 form.targets = json.loads(form.targets)
                 rds_cli = get_redis_connection()
                 rds_cli.lpush(settings.SCHEDULE_KEY, json.dumps(form))
         else:
             Task.objects.create(created_by=request.user, **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_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, 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:
                 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.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)