Exemplo n.º 1
0
 def create_tenant_on_region(self, team_name, region_name):
     tenant = team_repo.get_team_by_team_name(team_name)
     if not tenant:
         return 404, u"需要开通的团队{0}不存在".format(team_name), None
     region_config = region_repo.get_region_by_region_name(region_name)
     if not region_config:
         return 404, u"需要开通的数据中心{0}不存在".format(region_name), None
     tenant_region = region_repo.get_team_region_by_tenant_and_region(tenant.tenant_id, region_name)
     if not tenant_region:
         tenant_region_info = {"tenant_id": tenant.tenant_id, "region_name": region_name, "is_active": False}
         tenant_region = region_repo.create_tenant_region(**tenant_region_info)
     if not tenant_region.is_init:
         res, body = region_api.create_tenant(region_name, tenant.tenant_name,
                                              tenant.tenant_id, tenant.enterprise_id)
         if res["status"] != 200:
             return res["status"], u"数据中心创建租户失败", None
         tenant_region.is_active = True
         tenant_region.is_init = True
         # TODO 将从数据中心获取的租户信息记录到tenant_region, 当前只是用tenant的数据填充
         tenant_region.region_tenant_id = tenant.tenant_id
         tenant_region.region_tenant_name = tenant.tenant_name
         tenant_region.region_scope = region_config.scope
         tenant_region.enterprise_id = tenant.enterprise_id
         tenant_region.save()
     else:
         if (not tenant_region.region_tenant_id) or \
                 (not tenant_region.region_tenant_name) or \
                 (not tenant_region.enterprise_id):
             tenant_region.region_tenant_id = tenant.tenant_id
             tenant_region.region_tenant_name = tenant.tenant_name
             tenant_region.region_scope = region_config.scope
             tenant_region.enterprise_id = tenant.enterprise_id
             tenant_region.save()
     group_repo.get_or_create_default_group(tenant.tenant_id, region_name)
     return 200, u"success", tenant_region
Exemplo n.º 2
0
 def put(self, request, team_name, *args, **kwargs):
     """管理员审核用户"""
     try:
         # 判断角色
         identity_list = team_services.get_user_perm_identitys_in_permtenant(
             user_id=request.user.user_id, tenant_name=team_name)
         if "owner" or "admin" in identity_list:
             user_id = request.data.get("user_id")
             action = request.data.get("action")
             join = apply_repo.get_applicants_by_id_team_name(
                 user_id=user_id, team_name=team_name)
             if action is True:
                 join.update(is_pass=1)
                 team = team_repo.get_team_by_team_name(team_name=team_name)
                 team_services.add_user_to_team_by_viewer(tenant=team,
                                                          user_id=user_id)
                 return Response(general_message(200, "join success",
                                                 "加入成功"),
                                 status=200)
             else:
                 join.update(is_pass=2)
                 return Response(general_message(200, "join rejected",
                                                 "拒绝成功"),
                                 status=200)
     except Exception as e:
         logger.exception(e)
         result = error_message(e.message)
         return Response(result, status=result["code"])
Exemplo n.º 3
0
    def get_image_connection_info(self, scope, team_name):
        """
        :param scope: enterprise(企业) team(团队) goodrain(好雨云市)
        :param service: 应用模型
        :return: image_info

        hub.goodrain.com/goodrain/xxx:lasted
        """
        try:
            team = team_repo.get_team_by_team_name(team_name)
            if not team:
                return {}
            if scope == "goodrain":
                info = market_api.get_share_hub_info(team.tenant_id, "image")
                return info["image_repo"]
            else:
                image_config = ConsoleSysConfig.objects.filter(
                    key='APPSTORE_IMAGE_HUB')
                if not image_config:
                    return {"hub_url": 'goodrain.me', "namespace": team_name}
                image_config_dict = json_load(image_config[0].value)
                hub_url = image_config_dict.get("hub_url", None)
                hub_user = image_config_dict.get("hub_user", None)
                hub_password = image_config_dict.get("hub_password", None)
                namespace = image_config_dict.get("namespace", team_name)
                image_info = {
                    "hub_url": hub_url,
                    "hub_user": hub_user,
                    "hub_password": hub_password,
                    "namespace": namespace
                }
                return image_info
        except Exception as e:
            logger.exception(e)
            return {}
Exemplo n.º 4
0
 def create_applicants(self, user_id, team_name):
     applicant = apply_repo.get_applicants_by_id_team_name(user_id=user_id, team_name=team_name)
     if not applicant:
         team = team_repo.get_team_by_team_name(team_name=team_name)
         user = user_repo.get_by_user_id(user_id=user_id)
         info = {
             "user_id": user_id,
             "user_name": user.get_username(),
             "team_id": team.tenant_id,
             "team_name": team_name,
             "team_alias": team.tenant_alias,
             "apply_time": datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
         }
         return apply_repo.create_apply_info(**info)
     if applicant[0].is_pass == 0:
         raise ServiceHandleException(msg="already applied for it", msg_show="该团队已经申请过")
     if applicant[0].is_pass == 1:
         teams = team_repo.get_tenants_by_user_id(user_id)
         tnames = [team.tenant_name for team in teams]
         if team_name in tnames:
             raise ServiceHandleException(msg="already join for it", msg_show="您已加入该团队")
     applicant[0].apply_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
     applicant[0].is_pass = 0
     applicant[0].save()
     return applicant
Exemplo n.º 5
0
 def put(self, request, team_name, *args, **kwargs):
     """管理员审核用户"""
     user_id = request.data.get("user_id")
     action = request.data.get("action")
     role_ids = request.data.get("role_ids")
     join = apply_repo.get_applicants_by_id_team_name(user_id=user_id,
                                                      team_name=team_name)
     if action is True:
         join.update(is_pass=1)
         team = team_repo.get_team_by_team_name(team_name=team_name)
         team_services.add_user_to_team(tenant=team,
                                        user_id=user_id,
                                        role_ids=role_ids)
         # 发送通知
         info = "同意"
         self.send_user_message_for_apply_info(user_id=user_id,
                                               team_name=team.tenant_name,
                                               info=info)
         return Response(general_message(200, "join success", "加入成功"),
                         status=200)
     else:
         join.update(is_pass=2)
         info = "拒绝"
         self.send_user_message_for_apply_info(user_id=user_id,
                                               team_name=team_name,
                                               info=info)
         return Response(general_message(200, "join rejected", "拒绝成功"),
                         status=200)
Exemplo n.º 6
0
    def get(self, request, *args, **kwargs):

        self.tenantName = kwargs.get('tenantName', None)
        self.serviceAlias = kwargs.get('serviceAlias', None)
        tenant = team_repo.get_team_by_team_name(self.tenantName)
        if tenant:
            self.tenant = tenant
        else:
            raise http.Http404

        service = service_repo.get_service_by_tenant_and_alias(
            self.tenant.tenant_id, self.serviceAlias)
        if service:
            self.service = service
        else:
            raise http.Http404

        context = dict()
        response = redirect(
            get_redirect_url(
                "/#/app/{0}/overview".format(self.service.service_alias),
                request))
        try:
            docker_c_id = request.COOKIES.get('docker_c_id', '')
            docker_h_id = request.COOKIES.get('docker_h_id', '')
            docker_s_id = request.COOKIES.get('docker_s_id', '')
            if docker_c_id != "" and docker_h_id != "" and docker_s_id != "" and docker_s_id == self.service.service_id:
                t_docker_h_id = docker_h_id.lower()
                context["tenant_id"] = self.service.tenant_id
                context["service_id"] = docker_s_id
                context["ctn_id"] = docker_c_id
                context["md5"] = md5fun(self.service.tenant_id + "_" +
                                        docker_s_id + "_" + docker_c_id)

                main_url = region_services.get_region_wsurl(
                    self.service.service_region)
                if main_url == "auto":
                    context[
                        "ws_uri"] = '{}://{}:6060/docker_console?nodename={}'.format(
                            settings.DOCKER_WSS_URL["type"],
                            settings.DOCKER_WSS_URL[
                                self.service.service_region], t_docker_h_id)
                else:
                    context[
                        "ws_uri"] = "{0}/docker_console?nodename={1}".format(
                            main_url, t_docker_h_id)

                response = TemplateResponse(self.request, "www/console.html",
                                            context)
            response.delete_cookie('docker_c_id')
            response.delete_cookie('docker_h_id')
            response.delete_cookie('docker_s_id')
        except Exception as e:
            logger.exception(e)
        return response
    def create_tenant_on_region(self, team_name, region_name):
        tenant = team_repo.get_team_by_team_name(team_name)
        if not tenant:
            return 404, u"需要开通的团队{0}不存在".format(team_name), None
        region_config = region_repo.get_region_by_region_name(region_name)
        if not region_config:
            return 404, u"需要开通的数据中心{0}不存在".format(region_name), None
        if region_config.scope == "public":
            logger.debug("open public region {0} ".format(region_name))
            is_pass = self.get_enterprise_region_token_from_market(
                tenant.tenant_id, tenant.enterprise_id, region_name,
                region_config.url)
            if not is_pass:
                return 500, u"数据中心访问token获取异常", None

        tenant_region = region_repo.get_team_region_by_tenant_and_region(
            tenant.tenant_id, region_name)
        if not tenant_region:
            tenant_region_info = {
                "tenant_id": tenant.tenant_id,
                "region_name": region_name,
                "is_active": False
            }
            tenant_region = region_repo.create_tenant_region(
                **tenant_region_info)

        if not tenant_region.is_init:

            res, body = region_api.create_tenant(region_name,
                                                 tenant.tenant_name,
                                                 tenant.tenant_id,
                                                 tenant.enterprise_id)
            logger.debug("create region tenant : res, {0}, body {1}".format(
                res, body))
            tenant_region.is_active = True
            tenant_region.is_init = True
            # TODO 将从数据中心获取的租户信息记录到tenant_region, 当前只是用tenant的数据填充
            tenant_region.region_tenant_id = tenant.tenant_id
            tenant_region.region_tenant_name = tenant.tenant_name
            tenant_region.region_scope = region_config.scope
            tenant_region.enterprise_id = tenant.enterprise_id
            tenant_region.save()
        else:
            if (not tenant_region.region_tenant_id) or \
                    (not tenant_region.region_tenant_name) or \
                    (not tenant_region.enterprise_id):
                tenant_region.region_tenant_id = tenant.tenant_id
                tenant_region.region_tenant_name = tenant.tenant_name
                tenant_region.region_scope = region_config.scope
                tenant_region.enterprise_id = tenant.enterprise_id
                tenant_region.save()

        group_repo.get_or_create_default_group(tenant.tenant_id, region_name)

        return 200, u"success", tenant_region
Exemplo n.º 8
0
    def get_image_connection_info(self, scope, eid, team_name):
        """
        :param scope: enterprise(企业) team(团队) goodrain(好雨云市)
        :param team_name: 租户名称
        :return: image_info

        hub.goodrain.com/goodrain/xxx:lasted
        """
        try:
            team = team_repo.get_team_by_team_name(team_name)
            if not team and scope == "team":
                return {}
            if scope.startswith("goodrain"):
                info = market_api.get_enterprise_share_hub_info(eid, "image")
                return info["image_repo"]
            else:
                image_config = ConsoleSysConfig.objects.filter(
                    key='APPSTORE_IMAGE_HUB', enterprise_id=eid)
                namespace = eid if scope == "enterprise" else team_name
                if not image_config or not image_config[0].enable:
                    return {
                        "hub_url": settings.IMAGE_REPO,
                        "namespace": namespace
                    }
                image_config_dict = eval(image_config[0].value)
                hub_url = image_config_dict.get("hub_url", None)
                hub_user = image_config_dict.get("hub_user", None)
                hub_password = image_config_dict.get("hub_password", None)
                namespace = (image_config_dict.get("namespace") if
                             image_config_dict.get("namespace") else namespace)
                is_trust = hub_url == 'hub.goodrain.com'
                image_info = {
                    "hub_url": hub_url,
                    "hub_user": hub_user,
                    "hub_password": hub_password,
                    "namespace": namespace,
                    "is_trust": is_trust
                }
                return image_info
        except HttpClient.CallApiError as e:
            logger.exception(e)
            if e.status == 403:
                raise ServiceHandleException("no cloud permission",
                                             msg_show="云市授权不通过",
                                             status_code=403,
                                             error_code=10407)
            else:
                raise ServiceHandleException("call cloud api failure",
                                             msg_show="云市请求错误",
                                             status_code=500,
                                             error_code=500)
        except Exception as e:
            logger.exception(e)
            return {}
Exemplo n.º 9
0
    def get_slug_connection_info(self, scope, team_name):
        """
        :param scope: enterprise(企业) team(团队) goodrain(好雨云市)
        :return: slug_info

        /grdata/build/tenant/
        """
        try:
            team = team_repo.get_team_by_team_name(team_name)
            if not team:
                return {}
            if scope == "goodrain":
                info = market_api.get_share_hub_info(team.tenant_id, "slug")
                return info["slug_repo"]
            else:
                slug_config = ConsoleSysConfig.objects.filter(
                    key='APPSTORE_SLUG_PATH')
                if not slug_config:
                    return {"namespace": team_name}
                slug_config_dict = json_load(slug_config[0].value)
                ftp_host = slug_config_dict.get("ftp_host", None)
                ftp_port = slug_config_dict.get("ftp_port", None)
                ftp_namespace = slug_config_dict.get("namespace", None)
                ftp_username = slug_config_dict.get("ftp_username", None)
                ftp_password = slug_config_dict.get("ftp_password", None)
                slug_info = {
                    "ftp_host": ftp_host,
                    "ftp_port": ftp_port,
                    "namespace": ftp_namespace + "/" + team_name,
                    "ftp_username": ftp_username,
                    "ftp_password": ftp_password
                }
                return slug_info
        except HttpClient.CallApiError as e:
            logger.exception(e)
            if e.status == 403:
                raise ServiceHandleException("no cloud permission",
                                             msg_show="云市授权不通过",
                                             status_code=403,
                                             error_code=10407)
            else:
                raise ServiceHandleException("call cloud api failure",
                                             msg_show="云市请求错误",
                                             status_code=500,
                                             error_code=500)
        except Exception as e:
            logger.exception(e)
            return {}
Exemplo n.º 10
0
 def create_applicants(self, user_id, team_name):
     applicant = apply_repo.get_applicants_by_id_team_name(user_id=user_id, team_name=team_name)
     if not applicant:
         team = team_repo.get_team_by_team_name(team_name=team_name)
         user = user_repo.get_by_user_id(user_id=user_id)
         info = {
             "user_id": user_id,
             "user_name": user.get_username(),
             "team_id": team.tenant_id,
             "team_name": team_name,
             "team_alias": team.tenant_alias,
             "apply_time": datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
         }
         apply_repo.create_apply_info(**info)
         return info
     else:
         return None
Exemplo n.º 11
0
    def get(self, request, *args, **kwargs):
        """指定用户可以加入哪些团队"""
        try:
            tenants = team_repo.get_tenants_by_user_id(
                user_id=self.user.user_id)
            team_names = tenants.values("tenant_name")
            team_name_list = [
                t_name.get("tenant_name") for t_name in team_names
            ]

            user_id = request.GET.get("user_id", None)
            if user_id:
                enterprise_id = user_repo.get_by_user_id(
                    user_id=user_id).enterprise_id
                team_list = team_repo.get_teams_by_enterprise_id(enterprise_id)
                apply_team = apply_repo.get_applicants_team(user_id=user_id)
            else:
                enterprise_id = user_repo.get_by_user_id(
                    user_id=self.user.user_id).enterprise_id
                team_list = team_repo.get_teams_by_enterprise_id(enterprise_id)
                apply_team = apply_repo.get_applicants_team(
                    user_id=self.user.user_id)
            applied_team = [
                team_repo.get_team_by_team_name(team_name=team_name) for
                team_name in [team_name.team_name for team_name in apply_team]
            ]
            join_list = []
            for join_team in team_list:
                if join_team not in applied_team and join_team.tenant_name not in team_name_list:
                    join_list.append(join_team)
            join_list = [{
                "team_name": j_team.tenant_name,
                "team_alias": j_team.tenant_alias,
                "team_id": j_team.tenant_id
            } for j_team in join_list]
            result = general_message(200, "success", "查询成功", list=join_list)
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
        return Response(result, status=result["code"])
Exemplo n.º 12
0
    def open_team_region(self, team_name, region_name):
        tenant = team_repo.get_team_by_team_name(team_name)
        if not tenant:
            return 404, u"需要开通的团队{0}不存在".format(team_name), None
        region_config = region_repo.get_region_by_region_name_and_region_id(
            region_name)
        if not region_config:
            return 404, u"需要开通的数据中心{0}不存在".format(region_name), None
        tenant_region = region_repo.get_team_region_by_teannt_and_region(
            tenant.tenant_id, region_name)
        if not tenant_region:
            tenant_region = self.create_new_tenant_region(tenant, region_name)
        else:
            if not tenant_region.is_init:

                res, body = region_api.create_tenant(region_name,
                                                     tenant.tenant_name,
                                                     tenant.tenant_id,
                                                     tenant.enterprise_id)
                logger.debug(
                    "create region tenant : res, {0}, body {1}".format(
                        res, body))
                tenant_region.is_active = True
                tenant_region.is_init = True
                # TODO 将从数据中心获取的租户信息记录到tenant_region, 当前只是用tenant的数据填充
                tenant_region.region_tenant_id = tenant.tenant_id
                tenant_region.region_tenant_name = tenant.tenant_name
                tenant_region.region_scope = 'public'
                tenant_region.enterprise_id = tenant.enterprise_id
                tenant_region.save()
            else:
                if (not tenant_region.region_tenant_id) or \
                        (not tenant_region.region_tenant_name) or \
                        (not tenant_region.enterprise_id):
                    tenant_region.region_tenant_id = tenant.tenant_id
                    tenant_region.region_tenant_name = tenant.tenant_name
                    tenant_region.region_scope = 'public'
                    tenant_region.enterprise_id = tenant.enterprise_id
                    tenant_region.save()
        return 200, u"success", tenant_region
Exemplo n.º 13
0
    def get_slug_connection_info(self, scope, team_name):
        """
        :param scope: enterprise(企业) team(团队) goodrain(好雨云市)
        :return: slug_info

        /grdata/build/tenant/
        """
        try:
            team = team_repo.get_team_by_team_name(team_name)
            if not team:
                return {}
            if scope == "goodrain":
                info = market_api.get_share_hub_info(team.tenant_id, "slug")
                return info["slug_repo"]
            else:
                slug_config = ConsoleSysConfig.objects.filter(
                    key='APPSTORE_SLUG_PATH')
                if not slug_config:
                    return {"namespace": team_name}
                slug_config_dict = json_load(slug_config[0].value)
                ftp_host = slug_config_dict.get("ftp_host", None)
                ftp_port = slug_config_dict.get("ftp_port", None)
                ftp_namespace = slug_config_dict.get("namespace", None)
                ftp_username = slug_config_dict.get("ftp_username", None)
                ftp_password = slug_config_dict.get("ftp_password", None)
                slug_info = {
                    "ftp_host": ftp_host,
                    "ftp_port": ftp_port,
                    "namespace": ftp_namespace + "/" + team_name,
                    "ftp_username": ftp_username,
                    "ftp_password": ftp_password
                }
                return slug_info
        except Exception as e:
            logger.exception(e)
            return {}
Exemplo n.º 14
0
 def get_team_opened_region(self, team_name):
     """获取团队已开通的数据中心"""
     tenant = team_repo.get_team_by_team_name(team_name)
     return TenantRegionInfo.objects.filter(tenant_id=tenant.tenant_id)