def get(self, request, enterprise_id, *args, **kwargs): """ 获取应用导出状态 --- parameters: - name: tenantName description: 团队名称 required: true type: string paramType: path """ app_id = request.GET.get("app_id", None) app_version = request.GET.get("app_version", None) if not app_id or not app_version: return Response(general_message(400, "app id is null", "请指明需要查询的应用"), status=400) result_list = [] app_version_list = app_version.split("#") for version in app_version_list: app, app_version = market_app_service.get_rainbond_app_and_version( self.user.enterprise_id, app_id, version) if not app or not app_version: return Response(general_message(404, "not found", "云市应用不存在"), status=404) result = export_service.get_export_status(enterprise_id, app, app_version) result_list.append(result) result = general_message(200, "success", "查询成功", list=result_list) return Response(result, status=result["code"])
def post(self, request, enterprise_id, *args, **kwargs): """ 应用上下线 --- parameters: - name: app_id description: rainbond app id required: true type: string paramType: form - name: action description: 操作类型 online|offline required: true type: string paramType: form """ try: if not self.user.is_sys_admin: if not user_services.is_user_admin_in_current_enterprise(self.user, self.tenant.enterprise_id): return Response(general_message(403, "current user is not enterprise admin", "非企业管理员无法进行此操作"), status=403) app_id = request.data.get("app_id", None) app_version_list = request.data.get("app_versions", []) action = request.data.get("action", None) if not app_id: return Response(general_message(400, "group_key is null", "请指明需要安装应用的app_id"), status=400) if not app_version_list: return Response(general_message(400, "group_version_list is null", "请指明需要安装应用的版本"), status=400) if not action: return Response(general_message(400, "action is not specified", "操作类型未指定"), status=400) if action not in ("online", "offline"): return Response(general_message(400, "action is not allow", "不允许的操作类型"), status=400) for app_version in app_version_list: app, version = market_app_service.get_rainbond_app_and_version(self.user.enterprise_id, app_id, app_version) if not version: return Response(general_message(404, "not found", "云市应用不存在"), status=404) if action == "online": version.is_complete = True else: version.is_complete = False app.update_time = datetime.datetime.now() app.save() version.update_time = datetime.datetime.now() version.save() result = general_message(200, "success", "操作成功") 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: group_id description: 组id required: true type: string paramType: form - name: app_id description: rainbond app id required: true type: string paramType: form - name: install_from_cloud description: install app from cloud required: false type: bool paramType: form """ try: group_id = request.data.get("group_id", -1) app_id = request.data.get("app_id", None) app_version = request.data.get("app_version", None) is_deploy = request.data.get("is_deploy", True) install_from_cloud = request.data.get("install_from_cloud", False) if not app_id or not app_version: return Response(general_message(400, "app id is null", "请指明需要安装的应用"), status=400) if int(group_id) != -1: group_service.get_group_by_id(self.tenant, self.response_region, group_id) app = None app_version_info = None if install_from_cloud: app, app_version_info = market_app_service.get_app_from_cloud(self.tenant, app_id, app_version, True) if not app: return Response(general_message(404, "not found", "云端应用不存在"), status=404) else: app, app_version_info = market_app_service.get_rainbond_app_and_version(self.user.enterprise_id, app_id, app_version) if not app: return Response(general_message(404, "not found", "云市应用不存在"), status=404) market_app_service.install_service(self.tenant, self.response_region, self.user, group_id, app, app_version_info, is_deploy, install_from_cloud) if not install_from_cloud: market_app_service.update_rainbond_app_install_num(self.user.enterprise_id, app_id, app_version) logger.debug("market app create success") result = general_message(200, "success", "创建成功") except ResourceNotEnoughException as re: raise re except AccountOverdueException as re: logger.exception(re) return Response(general_message(10406, "resource is not enough", re.message), status=412) except ServiceHandleException as e: raise e except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=result["code"])
def get_build_info(self, tenant, service): service_source = service_source_repo.get_service_source( team_id=service.tenant_id, service_id=service.service_id) code_from = service.code_from oauth_type = support_oauth_type.keys() if code_from in oauth_type: result_url = re_split("[:,@]", service.git_url) service.git_url = result_url[0] + '//' + result_url[-1] bean = { "user_name": "", "password": "", "service_source": service.service_source, "image": service.image, "cmd": service.cmd, "code_from": service.code_from, "version": service.version, "docker_cmd": service.docker_cmd, "create_time": service.create_time, "git_url": service.git_url, "code_version": service.code_version, "server_type": service.server_type, "language": service.language, "oauth_service_id": service.oauth_service_id, "full_name": service.git_full_name } if service_source: bean["user"] = service_source.user_name bean["password"] = service_source.password if service.service_source == 'market': from console.services.market_app_service import market_app_service if service_source: # get from cloud app = None app_version = None if service_source.extend_info: extend_info = json.loads(service_source.extend_info) if extend_info and extend_info.get("install_from_cloud", False): app, app_version = market_app_service.get_app_from_cloud( tenant, service_source.group_key, service_source.version) bean["install_from_cloud"] = True bean["app_detail_url"] = app.describe if not app: try: app, app_version = market_app_service.get_rainbond_app_and_version( tenant.enterprise_id, service_source.group_key, service_source.version) except RbdAppNotFound: logger.warning( "not found app {0} version {1} in local market". format(service_source.group_key, service_source.version)) if app and app_version: bean["rain_app_name"] = app.app_name bean["details"] = app.details logger.debug("app_version: {}".format(app_version.version)) bean["app_version"] = app_version.version bean["version"] = app_version.version bean["group_key"] = app.app_id return bean
def post(self, request, *args, **kwargs): """ 创建应用市场应用 --- parameters: - name: tenantName description: 团队名称 required: true type: string paramType: path - name: group_id description: 组id required: true type: string paramType: form - name: app_id description: rainbond app id required: true type: string paramType: form - name: install_from_cloud description: install app from cloud required: false type: bool paramType: form """ try: group_id = request.data.get("group_id", -1) app_id = request.data.get("app_id", None) app_version = request.data.get("app_version", None) is_deploy = request.data.get("is_deploy", True) install_from_cloud = request.data.get("install_from_cloud", False) market_name = request.data.get("market_name", None) if not app_id or not app_version: return Response(general_message(400, "app id is null", "请指明需要安装的应用"), status=400) if int(group_id) != -1: group_service.get_group_by_id(self.tenant, self.response_region, group_id) app = None app_version_info = None if install_from_cloud: dt, market = app_market_service.get_app_market(self.tenant.enterprise_id, market_name, raise_exception=True) app, app_version_info = app_market_service.cloud_app_model_to_db_model( market, app_id, app_version, for_install=True) if not app: return Response(general_message(404, "not found", "云端应用不存在"), status=404) else: app, app_version_info = market_app_service.get_rainbond_app_and_version(self.user.enterprise_id, app_id, app_version) if not app: return Response(general_message(404, "not found", "云市应用不存在"), status=404) if app_version_info and app_version_info.region_name and app_version_info.region_name != self.region_name: raise ServiceHandleException( msg="app version can not install to this region", msg_show="该应用版本属于{}集群,无法跨集群安装,若需要跨集群,请在企业设置中配置跨集群访问的镜像仓库后重新发布。".format(app_version_info.region_name)) if not app_version_info: return Response(general_message(404, "not found", "应用版本不存在,不能进行安装"), status=404) market_app_service.install_service( self.tenant, self.response_region, self.user, group_id, app, app_version_info, is_deploy, install_from_cloud, market_name=market_name) if not install_from_cloud: market_app_service.update_rainbond_app_install_num(self.user.enterprise_id, app_id, app_version) logger.debug("market app create success") result = general_message(200, "success", "创建成功") except ServiceHandleException as e: raise e except ResourceNotEnoughException as re: raise re except AccountOverdueException as re: logger.exception(re) return Response(general_message(10406, "resource is not enough", re.message), status=412) return Response(result, status=result["code"])