Exemple #1
0
 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)
Exemple #2
0
    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
Exemple #4
0
 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)
Exemple #5
0
    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"])
Exemple #6
0
    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"])
Exemple #7
0
    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
Exemple #8
0
    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