Exemplo n.º 1
0
 def get(self, request, *args, **kwargs):
     compose_id = request.GET.get("compose_id", None)
     if not compose_id:
         return Response(general_message(400, "params error", "参数错误,请求参数应该包含compose ID"), status=400)
     group_compose = compose_service.get_group_compose_by_compose_id(compose_id)
     if group_compose:
         result = general_message(200, u"success", "获取成功", bean={"check_uuid": group_compose.check_uuid})
     else:
         result = general_message(404, u"success", "compose不存在", bean={"check_uuid": ""})
     return Response(result, status=200)
    def get(self, request, *args, **kwargs):
        """
        获取compose文件检测信息
        ---
        parameters:
            - name: tenantName
              description: 租户名
              required: true
              type: string
              paramType: path
            - name: group_id
              description: 组ID
              required: true
              type: string
              paramType: path
            - name: check_uuid
              description: 检测id
              required: true
              type: string
              paramType: query
            - name: compose_id
              description: group_compose ID
              required: true
              type: string
              paramType: query

        """
        sid = None
        try:
            check_uuid = request.GET.get("check_uuid", None)
            compose_id = request.GET.get("compose_id", None)
            if not check_uuid:
                return Response(general_message(400, "params error",
                                                "参数错误,请求参数应该包含请求的ID"),
                                status=400)
            if not compose_id:
                return Response(general_message(400, "params error",
                                                "参数错误,请求参数应该包含compose ID"),
                                status=400)
            group_compose = compose_service.get_group_compose_by_compose_id(
                compose_id)
            code, msg, data = app_check_service.get_service_check_info(
                self.tenant, self.response_region, check_uuid)
            logger.debug("start save compose info ! {0}".format(
                group_compose.create_status))
            save_code, save_msg, service_list = compose_service.save_compose_services(
                self.tenant, self.user, self.response_region, group_compose,
                data)
            if save_code != 200:
                data["check_status"] = "failure"
                save_error = {
                    "error_type": "check info save error",
                    "solve_advice": "修改相关信息后重新尝试",
                    "error_info": "{}".format(save_msg)
                }
                if data["error_infos"]:
                    data["error_infos"].append(save_error)
                else:
                    data["error_infos"] = [save_error]
            else:
                transaction.savepoint_commit(sid)
            compose_check_brief = compose_service.wrap_compose_check_info(data)
            result = general_message(200,
                                     "success",
                                     "请求成功",
                                     bean=compose_check_brief,
                                     list=[s.to_dict() for s in service_list])
        except ResourceNotEnoughException as re:
            raise re
        except AccountOverdueException as re:
            logger.exception(re)
            return Response(general_message(10410, "resource is not enough",
                                            re.message),
                            status=412)
        return Response(result, status=result["code"])
Exemplo n.º 3
0
    def post(self, request, *args, **kwargs):
        """
        docker-compose组件检测
        ---
        parameters:
            - name: tenantName
              description: 租户名
              required: true
              type: string
              paramType: path
            - name: group_id
              description: 组ID
              required: true
              type: string
              paramType: path
            - name: compose_id
              description: group_compose ID
              required: true
              type: string
              paramType: form
        """
        probe_map = dict()
        services = None

        try:
            compose_id = request.data.get("compose_id", None)
            if not compose_id:
                return Response(general_message(400, "params error", "参数异常"),
                                status=400)
            group_compose = compose_service.get_group_compose_by_compose_id(
                compose_id)
            services = compose_service.get_compose_services(compose_id)
            # 数据中心创建组件
            new_app_list = []
            for service in services:
                new_service = app_service.create_region_service(
                    self.tenant, service, self.user.nick_name)
                new_app_list.append(new_service)
                # 为组件添加默认探针
                code, msg, probe = app_service.add_service_default_porbe(
                    self.tenant, new_service)
                if probe:
                    probe_map[service.service_id] = probe.probe_id
                # 添加组件有无状态标签
                label_service.update_service_state_label(
                    self.tenant, new_service)

            group_compose.create_status = "complete"
            group_compose.save()
            for s in new_app_list:
                try:
                    app_manage_service.deploy(self.tenant,
                                              s,
                                              self.user,
                                              group_version=None)
                except Exception as e:
                    logger.exception(e)
                    continue

            result = general_message(200, "success", "构建成功")
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
            # 删除probe
            # 删除region端数据
            if services:
                for service in services:
                    if probe_map:
                        probe_id = probe_map.get(service.service_id)
                        probe_service.delete_service_probe(
                            self.tenant, service, probe_id)

                    event_service.delete_service_events(service)
                    port_service.delete_region_port(self.tenant, service)
                    volume_service.delete_region_volumes(self.tenant, service)
                    env_var_service.delete_region_env(self.tenant, service)
                    dependency_service.delete_region_dependency(
                        self.tenant, service)

                    app_manage_service.delete_region_service(
                        self.tenant, service)
                    service.create_status = "checked"
                    service.save()

        return Response(result, status=result["code"])