Exemplo n.º 1
0
 def post(self, request, *args, **kwargs):
     """
     更新
     """
     try:
         allow_create, tips = app_service.verify_source(
             self.tenant, self.service.service_region, 0, "start_app")
         if not allow_create:
             return Response(
                 general_message(412, "resource is not enough",
                                 "资源不足,无法更新"))
         code, msg, _ = app_manage_service.upgrade(self.tenant,
                                                   self.service, self.user)
         bean = {}
         if code != 200:
             return Response(general_message(code,
                                             "upgrade app error",
                                             msg,
                                             bean=bean),
                             status=code)
         result = general_message(code, "success", "操作成功", bean=bean)
     except ServiceHandleException as e:
         raise e
     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)
     except Exception as e:
         logger.exception(e)
         result = error_message(e.message)
     return Response(result, status=result["code"])
Exemplo n.º 2
0
    def start(self, tenant, service, user):
        from console.services.app import app_service
        new_add_memory = service.min_memory * service.min_node
        allow_start, tips = app_service.verify_source(tenant, service.service_region, new_add_memory,
                                                      "start_app")
        if not allow_start:
            return 412, "资源不足,无法启动应用", None

        code, msg, event = event_service.create_event(tenant, service, user, self.START)
        if code != 200:
            return code, msg, event

        if service.create_status == "complete":
            body = dict()
            body["deploy_version"] = service.deploy_version
            body["operator"] = str(user.nick_name)
            body["event_id"] = event.event_id
            body["enterprise_id"] = tenant.enterprise_id
            try:
                region_api.start_service(service.service_region, tenant.tenant_name, service.service_alias,
                                         body)
                logger.debug("user {0} start app !".format(user.nick_name))
            except region_api.CallApiError as e:
                logger.exception(e)
                if event:
                    event.message = u"启动应用失败".format(e.message)
                    event.final_status = "complete"
                    event.status = "failure"
                    event.save()
                return 507, u"服务异常", event
        else:
            event = event_service.update_event(event, "应用未在数据中心创建", "failure")
        return 200, u"操作成功", event
Exemplo n.º 3
0
    def post(self, request, *args, **kwargs):
        """
        启动服务
        ---
        parameters:
            - name: tenantName
              description: 租户名
              required: true
              type: string
              paramType: path
            - name: serviceAlias
              description: 服务别名
              required: true
              type: string
              paramType: path

        """
        try:
            new_add_memory = self.service.min_memory * self.service.min_node
            allow_create, tips = app_service.verify_source(self.tenant, self.service.service_region, new_add_memory,
                                                           "start_app")
            if not allow_create:
                return Response(general_message(412, "resource is not enough", "资源不足,无法启动"))
            code, msg = app_manage_service.start(self.tenant, self.service, self.user)
            bean = {}
            if code != 200:
                return Response(general_message(code, "start app error", msg, bean=bean), status=code)
            result = general_message(code, "success", "操作成功", bean=bean)
        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.º 4
0
    def post(self, request, *args, **kwargs):
        """
        回滚服务
        ---
        parameters:
            - name: tenantName
              description: 租户名
              required: true
              type: string
              paramType: path
            - name: serviceAlias
              description: 服务别名
              required: true
              type: string
              paramType: path
            - name: deploy_version
              description: 回滚的版本
              required: true
              type: string
              paramType: form

        """
        try:
            deploy_version = request.data.get("deploy_version", None)
            if not deploy_version:
                return Response(general_message(400,
                                                "deploy version is not found",
                                                "请指明回滚的版本"),
                                status=400)

            allow_create, tips = app_service.verify_source(
                self.tenant, self.service.service_region, 0, "start_app")
            if not allow_create:
                return Response(
                    general_message(412, "resource is not enough",
                                    "资源不足,无法回滚"))
            code, msg, event = app_manage_service.roll_back(
                self.tenant, self.service, self.user, deploy_version)
            bean = {}
            if event:
                bean = event.to_dict()
                bean["type_cn"] = event_service.translate_event_type(
                    event.type)
            if code != 200:
                return Response(general_message(code,
                                                "roll back app error",
                                                msg,
                                                bean=bean),
                                status=code)
            result = general_message(code, "success", "操作成功", bean=bean)
        except ResourceNotEnoughException as re:
            logger.exception(re)
            return Response(general_message(10406, "resource is not enough",
                                            re.message),
                            status=412)
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
        return Response(result, status=result["code"])
Exemplo n.º 5
0
    def post(self, request, *args, **kwargs):
        """
        回滚服务
        ---
        parameters:
            - name: tenantName
              description: 租户名
              required: true
              type: string
              paramType: path
            - name: serviceAlias
              description: 服务别名
              required: true
              type: string
              paramType: path
            - name: deploy_version
              description: 回滚的版本
              required: true
              type: string
              paramType: form

        """
        try:
            deploy_version = request.data.get("deploy_version", None)
            upgrade_or_rollback = request.data.get("upgrade_or_rollback", None)
            if not deploy_version or not upgrade_or_rollback:
                return Response(general_message(400,
                                                "deploy version is not found",
                                                "请指明版本及操作类型"),
                                status=400)

            allow_create, tips = app_service.verify_source(
                self.tenant, self.service.service_region, 0, "start_app")
            if not allow_create:
                return Response(
                    general_message(412, "resource is not enough",
                                    "资源不足,无法操作"))
            code, msg = app_manage_service.roll_back(self.tenant, self.service,
                                                     self.user, deploy_version,
                                                     upgrade_or_rollback)
            bean = {}
            if code != 200:
                return Response(general_message(code,
                                                "roll back app error",
                                                msg,
                                                bean=bean),
                                status=code)
            result = general_message(code, "success", "操作成功", bean=bean)
        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)
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
        return Response(result, status=result["code"])
Exemplo n.º 6
0
    def post(self, request, *args, **kwargs):
        """
        部署服务
        ---
        parameters:
            - name: tenantName
              description: 租户名
              required: true
              type: string
              paramType: path
            - name: serviceAlias
              description: 服务别名
              required: true
              type: string
              paramType: path

        """
        try:
            group_version = request.data.get("group_version", None)
            is_upgrade = request.data.get("is_upgrade", True)
            allow_create, tips = app_service.verify_source(
                self.tenant, self.service.service_region, 0, "start_app")
            if not allow_create:
                return Response(
                    general_message(412, "resource is not enough",
                                    "资源不足,无法部署"))

            code, msg, event = app_deploy_service.deploy(self.tenant,
                                                         self.service,
                                                         self.user,
                                                         is_upgrade,
                                                         version=group_version)

            bean = {}
            if event:
                bean = event.to_dict()
                bean["type_cn"] = event_service.translate_event_type(
                    event.type)
            if code != 200:
                return Response(general_message(code,
                                                "deploy app error",
                                                msg,
                                                bean=bean),
                                status=code)
            result = general_message(code, "success", "操作成功", bean=bean)
        except ResourceNotEnoughException as re:
            logger.exception(re)
            return Response(general_message(10406, "resource is not enough",
                                            re.message),
                            status=412)
        except AccountOverdueException as re:
            logger.exception(re)
            return Response(general_message(10410, "resource is not enough",
                                            re.message),
                            status=412)
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
        return Response(result, status=result["code"])
Exemplo n.º 7
0
 def verify_compose_services(self, tenant, region, data):
     if data["check_status"] == "success":
         service_info_list = data["service_info"]
         # 默认128 M
         new_add_memory = len(service_info_list) * 128
         return app_service.verify_source(tenant, region, new_add_memory,
                                          "compose_service_create")
     else:
         return True, "check is not success"
Exemplo n.º 8
0
    def post(self, request, *args, **kwargs):
        """
        水平升级服务
        ---
        parameters:
            - name: tenantName
              description: 租户名
              required: true
              type: string
              paramType: path
            - name: serviceAlias
              description: 服务别名
              required: true
              type: string
              paramType: path
            - name: new_node
              description: 节点个数
              required: true
              type: int
              paramType: form

        """
        try:
            new_node = request.data.get("new_node", None)
            if not new_node:
                return Response(general_message(400, "node is null", "请选择节点个数"), status=400)
            new_add_memory = (int(new_node) - self.service.min_node) * self.service.min_memory
            if new_add_memory < 0:
                new_add_memory = 0
            allow_create, tips = app_service.verify_source(self.tenant, self.service.service_region, new_add_memory,
                                                           "start_app")
            if not allow_create:
                return Response(general_message(412, "resource is not enough", "资源不足,无法升级"))

            code, msg, event = app_manage_service.horizontal_upgrade(self.tenant, self.service, self.user,
                                                                     int(new_node))
            bean = {}
            if event:
                bean = event.to_dict()
                bean["type_cn"] = event_service.translate_event_type(event.type)
            if code != 200:
                return Response(general_message(code, "horizontal upgrade error", msg, bean=bean), status=code)
            result = general_message(code, "success", "操作成功", bean=bean)
        except ResourceNotEnoughException as re:
            logger.exception(re)
            return Response(general_message(10406, "resource is not enough", re.message), status=412)
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
        return Response(result, status=result["code"])
Exemplo n.º 9
0
 def check_package_app_resource(self, tenant, region, market_app):
     app_templates = json.loads(market_app.app_template)
     apps = app_templates["apps"]
     total_memory = 0
     for app in apps:
         extend_method = app.get("extend_method_map", None)
         if not extend_method:
             min_node = 1
             min_memory = 128
         else:
             min_node = int(extend_method.get("min_node", 1))
             min_memory = int(extend_method.get("min_memory", 128))
         total_memory += min_node * min_memory
     allow_create, tips = app_service.verify_source(tenant, region,
                                                    total_memory, "应用市场创建")
     return allow_create, tips, total_memory
Exemplo n.º 10
0
    def post(self, request, *args, **kwargs):
        """
        垂直升级服务
        ---
        parameters:
            - name: tenantName
              description: 租户名
              required: true
              type: string
              paramType: path
            - name: serviceAlias
              description: 服务别名
              required: true
              type: string
              paramType: path
            - name: new_memory
              description: 内存大小(单位:M)
              required: true
              type: int
              paramType: form

        """
        try:
            new_memory = request.data.get("new_memory", None)
            if not new_memory:
                return Response(general_message(400, "memory is null", "请选择升级内存"), status=400)
            new_add_memory = (int(new_memory) * self.service.min_node) - self.service.min_node * self.service.min_memory
            if new_add_memory < 0:
                new_add_memory = 0
            allow_create, tips = app_service.verify_source(self.tenant, self.service.service_region, new_add_memory,
                                                           "start_app")
            if not allow_create:
                return Response(general_message(412, "resource is not enough", "资源不足,无法升级"))
            code, msg = app_manage_service.vertical_upgrade(self.tenant, self.service, self.user, int(new_memory))
            bean = {}
            if code != 200:
                return Response(general_message(code, "vertical upgrade error", msg, bean=bean), status=code)
            result = general_message(code, "success", "操作成功", bean=bean)
        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.º 11
0
 def post(self, request, *args, **kwargs):
     """
     更新
     """
     try:
         allow_create, tips = app_service.verify_source(self.tenant, self.service.service_region, 0, "start_app")
         if not allow_create:
             return Response(general_message(412, "resource is not enough", "资源不足,无法更新"))
         code, msg, event = app_manage_service.upgrade(self.tenant, self.service, self.user)
         bean = {}
         if event:
             bean = event.to_dict()
             bean["type_cn"] = event_service.translate_event_type(event.type)
         if code != 200:
             return Response(general_message(code, "upgrade app error", msg, bean=bean), status=code)
         result = general_message(code, "success", "操作成功", bean=bean)
     except ResourceNotEnoughException as re:
         logger.exception(re)
         return Response(general_message(10406, "resource is not enough", re.message), status=412)
     except Exception as e:
         logger.exception(e)
         result = error_message(e.message)
     return Response(result, status=result["code"])
Exemplo n.º 12
0
    def post(self, request, *args, **kwargs):
        """
        部署服务
        ---
        parameters:
            - name: tenantName
              description: 租户名
              required: true
              type: string
              paramType: path
            - name: serviceAlias
              description: 服务别名
              required: true
              type: string
              paramType: path

        """
        try:
            group_version = request.data.get("group_version", None)
            allow_create, tips = app_service.verify_source(self.tenant, self.service.service_region, 0, "start_app")
            if not allow_create:
                return Response(general_message(412, "resource is not enough", "资源不足,无法部署"))
            code, msg, _ = app_deploy_service.deploy(self.tenant, self.service, self.user, version=group_version)
            bean = {}
            if code != 200:
                return Response(general_message(code, "deploy app error", msg, bean=bean), status=code)
            result = general_message(code, "success", "操作成功", bean=bean)
        except ErrServiceSourceNotFound as e:
            logger.exception(e)
            return Response(general_message(412, e.message, "无法找到云市应用的构建源"), status=412)
        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"])