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