def get(self, request, *args, **kwargs): try: data = list(support_oauth_type.keys()) except Exception as e: logger.debug(e) return Response(error_message(e), status=status.HTTP_200_OK) rst = {"data": {"bean": {"oauth_type": data}}} return Response(rst, status=status.HTTP_200_OK)
def init_repositories(self, service, user, service_code_from, service_code_clone_url, service_code_id, service_code_version, check_uuid, event_id, oauth_service_id, git_full_name): if service_code_from == SourceCodeType.GITLAB_MANUAL or service_code_from == SourceCodeType.GITLAB_DEMO: service_code_id = "0" if service_code_from in (SourceCodeType.GITLAB_EXIT, SourceCodeType.GITLAB_MANUAL, SourceCodeType.GITLAB_DEMO): if not service_code_clone_url or not service_code_id: return 403, "代码信息不全" service.git_project_id = service_code_id service.git_url = service_code_clone_url service.code_from = service_code_from service.code_version = service_code_version service.save() elif service_code_from == SourceCodeType.GITHUB: if not service_code_clone_url: return 403, "代码信息不全" service.git_project_id = service_code_id service.git_url = service_code_clone_url service.code_from = service_code_from service.code_version = service_code_version service.save() code_user = service_code_clone_url.split("/")[3] code_project_name = service_code_clone_url.split("/")[4].split( ".")[0] gitHubClient.createReposHook(code_user, code_project_name, user.github_token) elif service_code_from.split("oauth_")[-1] in list( support_oauth_type.keys()): if not service_code_clone_url: return 403, "代码信息不全" if check_uuid: service.check_uuid = check_uuid if event_id: service.check_event_id = event_id service.git_project_id = service_code_id service.git_url = service_code_clone_url service.code_from = service_code_from service.code_version = service_code_version service.oauth_service_id = oauth_service_id service.git_full_name = git_full_name service.save() return 200, "success"
def create_or_update_console_oauth_services(self, values, eid): old_oauth_service = OAuthServices.objects.filter( eid=eid, is_console=True).first() for value in values[:1]: if value["oauth_type"] in support_oauth_type.keys(): instance = get_oauth_instance(value["oauth_type"]) auth_url = instance.get_auth_url(home_url=value["home_url"]) access_token_url = instance.get_access_token_url( home_url=value["home_url"]) api_url = instance.get_user_url(home_url=value["home_url"]) is_git = instance.is_git_oauth() if value.get( "service_id") is None and old_oauth_service is None: OAuthServices.objects.create( name=value["name"], client_id=value["client_id"], eid=value["eid"], client_secret=value["client_secret"], redirect_uri=value["redirect_uri"], oauth_type=value["oauth_type"], home_url=value["home_url"], auth_url=auth_url, access_token_url=access_token_url, api_url=api_url, enable=value["enable"], is_auto_login=value["is_auto_login"], is_console=value["is_console"], is_git=is_git) elif old_oauth_service is not None and value.get( "service_id") == old_oauth_service.ID: OAuthServices.objects.filter( ID=value["service_id"]).update( name=value["name"], eid=value["eid"], redirect_uri=value["redirect_uri"], home_url=value["home_url"], auth_url=auth_url, access_token_url=access_token_url, api_url=api_url, enable=value["enable"], is_auto_login=value["is_auto_login"], is_console=value["is_console"]) else: raise Exception(u"未找到该OAuth类型") rst = OAuthServices.objects.filter(eid=eid, is_console=True) return rst
def get(self, request): data = support_oauth_type.keys() serializer = OAuthTypeSerializer(data={"type": data}) serializer.is_valid() return Response(serializer.data, status=status.HTTP_200_OK)
def get(self, request, *args, **kwargs): """ 获取组件检测信息 --- parameters: - name: tenantName description: 租户名 required: true type: string paramType: path - name: serviceAlias description: 组件别名 required: true type: string paramType: path - name: check_uuid description: 检测id required: true type: string paramType: query """ check_uuid = request.GET.get("check_uuid", None) if not check_uuid: return Response(general_message(400, "params error", "参数错误,请求参数应该包含请求的ID"), status=400) code, msg, data = app_check_service.get_service_check_info( self.tenant, self.service.service_region, check_uuid) # 如果已创建完成 if self.service.create_status == "complete": service_info = data.get("service_info") if service_info is not None and len( service_info) > 1 and service_info[0].get( "language") == "Java-maven": pass else: app_check_service.update_service_check_info( self.tenant, self.service, data) check_brief_info = app_check_service.wrap_service_check_info( self.service, data) return Response( general_message(200, "success", "请求成功", bean=check_brief_info)) if data["service_info"] and len(data["service_info"]) < 2: # No need to save env, ports and other information for multiple services here. logger.debug("start save check info ! {0}".format( self.service.create_status)) save_code, save_msg = app_check_service.save_service_check_info( self.tenant, self.service, 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] check_brief_info = app_check_service.wrap_service_check_info( self.service, data) code_from = self.service.code_from if code_from in support_oauth_type.keys(): for i in check_brief_info["service_info"]: if i["type"] == "source_from": result_url = re_spilt("[:,@]", i["value"]) if len(result_url) != 2: i["value"] = result_url[0] + '//' + result_url[ -2] + result_url[-1] result = general_message(200, "success", "请求成功", bean=check_brief_info) return Response(result, status=result["code"])
def get(self, request, *args, **kwargs): """ 查询构建源信息 --- """ try: service_source = service_source_repo.get_service_source( team_id=self.service.tenant_id, service_id=self.service.service_id) code_from = self.service.code_from oauth_type = support_oauth_type.keys() if code_from in oauth_type: result_url = re_split("[:,@]", self.service.git_url) self.service.git_url = result_url[0] + '//' + result_url[-1] bean = { "user_name": "", "password": "", "service_source": self.service.service_source, "image": self.service.image, "cmd": self.service.cmd, "code_from": self.service.code_from, "version": self.service.version, "docker_cmd": self.service.docker_cmd, "create_time": self.service.create_time, "git_url": self.service.git_url, "code_version": self.service.code_version, "server_type": self.service.server_type, "language": self.service.language, "oauth_service_id": self.service.oauth_service_id, "full_name": self.service.git_full_name } if service_source: bean["user"] = service_source.user_name bean["password"] = service_source.password if self.service.service_source == 'market': if service_source: # get from cloud rain_app = 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): rain_app = market_app_service.get_app_from_cloud( self.tenant, service_source.group_key, service_source.version) bean["install_from_cloud"] = True bean["app_detail_url"] = rain_app.describe if not rain_app: rain_app = rainbond_app_repo.get_rainbond_app_by_key_and_version( service_source.group_key, service_source.version) if rain_app: bean["rain_app_name"] = rain_app.group_name bean["details"] = rain_app.details logger.debug("app_version: {}".format( rain_app.version)) bean["app_version"] = rain_app.version bean["version"] = rain_app.version bean["group_key"] = rain_app.group_key result = general_message(200, "success", "查询成功", bean=bean) 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 get_build_infos(self, tenant, service_ids): from console.repositories.service_repo import service_repo apps = dict() markets = dict() build_infos = dict() services = service_repo.get_service_by_service_ids( service_ids=service_ids) svc_sources = service_source_repo.get_service_sources( team_id=tenant.tenant_id, service_ids=service_ids) service_sources = {svc_ss.service_id: svc_ss for svc_ss in svc_sources} for service in services: service_source = service_sources.get(service.service_id, None) code_from = service.code_from oauth_type = list(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.app import app_market_service from console.services.market_app_service import market_app_service if not service_source: build_infos[service.service_id] = bean return build_infos # get from cloud app = 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): market_name = extend_info.get("market_name") bean["install_from_cloud"] = True try: market = markets.get(market_name, None) if not market: market = app_market_service.get_app_market_by_name( tenant.enterprise_id, market_name, raise_exception=True) markets[market_name] = market app = apps.get(service_source.group_key, None) if not app: app, _ = app_market_service.cloud_app_model_to_db_model( market, service_source.group_key, None) apps[service_source.group_key] = app bean["market_error_code"] = 200 bean["market_status"] = 1 except ServiceHandleException as e: logger.debug(e) bean["market_status"] = 0 bean["market_error_code"] = e.error_code bean["version"] = service_source.version bean["app_version"] = service_source.version return bean bean["install_from_cloud"] = True bean["app_detail_url"] = app.describe if not app: try: app = market_app_service.get_rainbond_app( tenant.enterprise_id, service_source.group_key) except RbdAppNotFound: logger.warning( "not found app {0} version {1} in local market". format(service_source.group_key, service_source.version)) if app: bean["rain_app_name"] = app.app_name bean["details"] = app.details bean["group_key"] = app.app_id bean["app_version"] = service_source.version bean["version"] = service_source.version build_infos[service.service_id] = bean return build_infos