Beispiel #1
0
 def update_group(self,
                  tenant,
                  region_name,
                  app_id,
                  app_name,
                  note="",
                  username=None):
     # check app id
     if not app_id or not str.isdigit(app_id) or int(app_id) < 0:
         raise ServiceHandleException(msg="app id illegal",
                                      msg_show="应用ID不合法")
     # check username
     if username:
         try:
             data = {"username": username}
             user_repo.get_user_by_username(username)
             group_repo.update(app_id, **data)
             return
         except ErrUserNotFound:
             raise ServiceHandleException(msg="user not exists",
                                          msg_show="用户不存在,请选择其他应用负责人",
                                          status_code=404)
     # check app name
     self.check_app_name(tenant, region_name, app_name)
     group = group_repo.get_group_by_unique_key(tenant.tenant_id,
                                                region_name, app_name)
     if group and int(group.ID) != int(app_id):
         raise ServiceHandleException(msg="app already exists",
                                      msg_show="应用名{0}已存在".format(app_name))
     data = {
         "note": note,
     }
     if app_name:
         data["group_name"] = app_name
     group_repo.update(app_id, **data)
Beispiel #2
0
    def update_group(self,
                     tenant,
                     region_name,
                     app_id,
                     app_name,
                     note="",
                     username=None):
        # check app id
        if not app_id or app_id < 0:
            raise ServiceHandleException(msg="app id illegal",
                                         msg_show="应用ID不合法")
        # check username
        if username:
            user_repo.get_user_by_username(username)
        # check app name
        self.check_app_name(tenant, region_name, app_name)

        data = {
            "note": note,
        }
        if username:
            data["username"] = username
        if app_name:
            data["group_name"] = app_name

        group_repo.update(app_id, **data)
Beispiel #3
0
    def get_app_detail(self, tenant, region_name, app_id):
        # app metadata
        app = group_repo.get_group_by_pk(tenant.tenant_id, region_name, app_id)

        self.sync_app_services(tenant, region_name, app_id)

        res = app.to_dict()
        res['app_id'] = app.ID
        res['app_name'] = app.group_name
        res['service_num'] = group_service_relation_repo.count_service_by_app_id(
            app_id)
        res['backup_num'] = backup_record_repo.count_by_app_id(app_id)
        res['share_num'] = share_repo.count_by_app_id(app_id)
        res['ingress_num'] = self.count_ingress_by_app_id(
            tenant.tenant_id, region_name, app_id)
        res['config_group_num'] = app_config_group_service.count_by_app_id(
            region_name, app_id)

        try:
            principal = user_repo.get_user_by_username(app.username)
            res['principal'] = principal.get_name()
            res['email'] = principal.email
        except ErrUserNotFound:
            res['principal'] = app.username

        res["create_status"] = "complete"
        res["compose_id"] = None
        if app_id != -1:
            compose_group = compose_repo.get_group_compose_by_group_id(app_id)
            if compose_group:
                res["create_status"] = compose_group.create_status
                res["compose_id"] = compose_group.compose_id

        return res
Beispiel #4
0
    def sync_market_plugin_templates(self, user, tenant, plugin_data):
        plugin_template = market_api.get_plugin_templates(tenant.tenant_id, plugin_data.get('plugin_key'),
                                                          plugin_data.get('version'))
        market_plugin = plugin_template.get('plugin')
        if not market_plugin:
            return True
        rcps = RainbondCenterPlugin.objects.filter(
            plugin_key=market_plugin.get('plugin_key'),
            version=market_plugin.get('major_version'),
            enterprise_id__in=[tenant.enterprise_id, "public"])

        rcp = None
        if rcps:
            # 优先获取企业的插件
            enter_rcp = rcps.filter(enterprise_id=tenant.enterprise_id)
            if enter_rcp:
                rcp = enter_rcp[0]
            else:
                rcp = rcps[0]
        if rcp:
            rcp.share_user = 0
            user_name = market_plugin.get('share_user')
            if user_name:
                try:
                    user = user_repo.get_user_by_username(user_name)
                    rcp.share_user = user.user_id
                except Exception as e:
                    logger.exception(e)

            rcp.plugin_template = market_plugin.get("template").get('template_content')
            rcp.pic = market_plugin.get('logo')
            rcp.desc = market_plugin.get('intro')
            rcp.version = market_plugin.get('major_version')
            rcp.details = market_plugin.get("desc", "")
            rcp.is_complete = True
            rcp.save()
            return True
        else:
            enterprise_id = tenant.enterprise_id
            rcp = RainbondCenterPlugin(
                plugin_key=market_plugin.get('plugin_key'),
                plugin_name=market_plugin.get('name'),
                version=market_plugin.get('major_version'),
                desc=market_plugin.get('intro'),
                pic=market_plugin.get('logo'),
                build_version=market_plugin.get('build_version'),
                record_id=0,
                category=market_plugin.get('category'),
                scope='goodrain',
                source='market',
                share_user=0,
                share_team='',
                enterprise_id=enterprise_id,
                plugin_template=market_plugin.get("template").get('template_content'),
                is_complete=True,
                details=market_plugin.get("desc", ""))
            rcp.save()
            return True
Beispiel #5
0
    def post(self, request, *args, **kwargs):
        """
        给一个用户推送一条站内信
        ---
        parameters:
            - name: nick_name
              description: 接受消息用户的nick_name
              required: true
              type: int
              paramType: form
            - name: title
              description: 标题
              required: true
              type: string
              paramType: form
            - name: content
              description: 消息内容
              required: true
              type: string
              paramType: form
            - name: msg_type
              description: 消息类型  公告 = "announcement"  提醒 = "own_money" 消息 = "service_abnormal"
              required: true
              type: string
              paramType: form
            - name: level
              description: 消息等级 high,mid,low
              required: true
              type: string
              paramType: form

        """
        try:
            data = request.data
            print data
            serializer = MessageSerilizer(data=data)
            if not serializer.is_valid():
                logger.error("params error")
                return self.error_response(code="400",
                                           msg="params error",
                                           msg_show="参数错误")
            from www.utils.crypt import make_uuid
            message_id = make_uuid()
            params = dict(serializer.data)
            nick_name = params.get("nick_name")
            user_obj = user_repo.get_user_by_username(nick_name)
            params.update({"message_id": message_id})
            params.update({"receiver_id": user_obj.user_id})
            del params["nick_name"]
            UserMessage.objects.create(**params)
            return self.success_response(msg="success", msg_show="添加成功")
        except UserNotExistError as e:
            logger.exception(e)
            return self.error_response(code=400, msg_show=e.message)
        except Exception as e:
            logger.exception(e)
            return self.error_response()
    def save_market_app_template(self, user, tenant, app_templates):
        template_version = app_templates["template_version"]
        is_v1 = bool(template_version == "v1")
        if is_v1:
            v2_template = template_transform_service.v1_to_v2(app_templates)
        else:
            v2_template = app_templates
        rainbond_app = rainbond_app_repo.get_enterpirse_app_by_key_and_version(
            tenant.enterprise_id, v2_template["group_key"],
            v2_template["group_version"])

        if not rainbond_app:
            if common_services.is_public() and user.is_sys_admin:
                enterprise_id = "public"
            else:
                enterprise_id = tenant.enterprise_id
            rainbond_app = RainbondCenterApp(
                group_key=app_templates["group_key"],
                group_name=app_templates["group_name"],
                version=app_templates['group_version'],
                share_user=0,
                record_id=0,
                share_team="",
                source="market",
                scope="goodrain",
                describe=app_templates["info"],
                pic=app_templates["pic"],
                app_template="",
                enterprise_id=enterprise_id,
                template_version=app_templates.get("template_version", ""))
        if is_v1:
            rainbond_app.share_user = v2_template["share_user"]
            rainbond_app.share_team = v2_template["share_team"]
            rainbond_app.pic = v2_template["pic"]
            rainbond_app.describe = v2_template["describe"]
            rainbond_app.app_template = json.dumps(v2_template)
            rainbond_app.is_complete = True
            rainbond_app.update_time = current_time_str("%Y-%m-%d %H:%M:%S")
            rainbond_app.save()
        else:
            user_name = v2_template.get("publish_user", None)
            user_id = 0
            if user_name:
                try:
                    user = user_repo.get_user_by_username(user_name)
                    user_id = user.user_id
                except Exception as e:
                    logger.exception(e)
            rainbond_app.share_user = user_id
            rainbond_app.share_team = v2_template.get("publish_team", "")
            rainbond_app.pic = v2_template.get("pic", rainbond_app.pic)
            rainbond_app.describe = v2_template.get("update_note",
                                                    rainbond_app.describe)
            rainbond_app.app_template = v2_template["template_content"]
            rainbond_app.is_complete = True
            rainbond_app.update_time = current_time_str("%Y-%m-%d %H:%M:%S")
            rainbond_app.save()
Beispiel #7
0
 def handle(self, *args, **options):
     username = options['username']
     password = options['password']
     if not username or not password:
         raise CommandError('username or password can not be empty')
     try:
         user = user_repo.get_user_by_username(username)
     except ErrUserNotFound:
         raise CommandError('User "{}" does not exist'.format(username))
     user.set_password(password)
     user.save()
     print("change user {} password success".format(user.real_name))
Beispiel #8
0
    def update_group(self, tenant, region_name, app_id, app_name, note="", username=None, overrides="", version="", revision=0):
        # check app id
        if not app_id or not str.isdigit(app_id) or int(app_id) < 0:
            raise ServiceHandleException(msg="app id illegal", msg_show="应用ID不合法")
        # check username
        if username:
            try:
                data = {"username": username}
                user_repo.get_user_by_username(username)
                group_repo.update(app_id, **data)
                return
            except ErrUserNotFound:
                raise ServiceHandleException(msg="user not exists", msg_show="用户不存在,请选择其他应用负责人", status_code=404)
        # check app name
        if app_name:
            self.check_app_name(tenant, region_name, app_name)
        if overrides:
            overrides = self._parse_overrides(overrides)

        group = group_repo.get_group_by_unique_key(tenant.tenant_id, region_name, app_name)
        if group and int(group.ID) != int(app_id):
            raise ServiceHandleException(msg="app already exists", msg_show="应用名{0}已存在".format(app_name))
        data = {
            "note": note,
        }
        if app_name:
            data["group_name"] = app_name
        if version:
            data["version"] = version

        group_repo.update(app_id, **data)

        region_app_id = region_app_repo.get_region_app_id(region_name, app_id)
        region_api.update_app(region_name, tenant.tenant_name, region_app_id, {
            "overrides": overrides,
            "version": version,
            "revision": revision,
        })
 def get_group_by_id(self, tenant, region, group_id):
     principal_info = dict()
     principal_info["email"] = ""
     principal_info["is_delete"] = False
     group = group_repo.get_group_by_pk(tenant.tenant_id, region, group_id)
     if not group:
         raise ServiceHandleException(status_code=404, msg="app not found", msg_show="目标应用不存在")
     try:
         user = user_repo.get_user_by_username(group.username)
         principal_info["real_name"] = user.get_name()
         principal_info["username"] = user.nick_name
         principal_info["email"] = user.email
     except ErrUserNotFound:
         principal_info["is_delete"] = True
         principal_info["real_name"] = group.username
         principal_info["username"] = group.username
     return {"group_id": group.ID, "group_name": group.group_name, "group_note": group.note, "principal": principal_info}
Beispiel #10
0
 def save_market_app_template(self, app_templates):
     template_version = app_templates["template_version"]
     is_v1 = bool(template_version == "v1")
     if is_v1:
         v2_template = template_transform_service.v1_to_v2(app_templates)
     else:
         v2_template = app_templates
     rainbond_app = rainbond_app_repo.get_rainbond_app_by_key_and_version(
         v2_template["group_key"], v2_template["group_version"])
     logger.debug("=========> {0}".format(json.dumps(v2_template)))
     if rainbond_app:
         if is_v1:
             rainbond_app.share_user = v2_template["share_user"]
             rainbond_app.share_team = v2_template["share_team"]
             rainbond_app.pic = v2_template["pic"]
             rainbond_app.describe = v2_template["describe"]
             rainbond_app.app_template = json.dumps(v2_template)
             rainbond_app.is_complete = True
             rainbond_app.update_time = current_time_str(
                 "%Y-%m-%d %H:%M:%S")
             rainbond_app.save()
         else:
             user_name = v2_template.get("publish_user", None)
             user_id = 0
             if user_name:
                 try:
                     user = user_repo.get_user_by_username(user_name)
                     user_id = user.user_id
                 except Exception as e:
                     logger.exception(e)
             rainbond_app.share_user = user_id
             rainbond_app.share_team = v2_template.get("publish_team", "")
             rainbond_app.pic = v2_template.get("pic", rainbond_app.pic)
             rainbond_app.describe = v2_template.get(
                 "update_note", rainbond_app.describe)
             rainbond_app.app_template = v2_template["template_content"]
             rainbond_app.is_complete = True
             rainbond_app.update_time = current_time_str(
                 "%Y-%m-%d %H:%M:%S")
             rainbond_app.save()
Beispiel #11
0
    def post(self, request, *args, **kwargs):
        """
        添加团队
        ---
        parameters:
            - name: tenant_name
              description: 团队名
              required: true
              type: string
              paramType: form
            - name: enterprise_id
              description: 企业ID
              required: true
              type: string
              paramType: form
            - name: useable_regions
              description: 可用数据中心 ali-sh,ali-hz
              required: false
              type: string
              paramType: form
        """
        sid = None
        try:
            tenant_name = request.data.get("tenant_name", None)
            if not tenant_name:
                return Response(generate_result("1003", "team name is none", "团对名称不能为空"))
            enterprise_id = request.data.get("enterprise_id", None)
            if not enterprise_id:
                return Response(generate_result("1003", "enterprise id is none", "企业ID不能为空"))
            enter = enterprise_services.get_enterprise_by_enterprise_id(enterprise_id)
            if not enter:
                return Response(generate_result("0404", "enterprise not found", "企业在云帮不存在"))

            team = console_team_service.get_team_by_team_alias_and_eid(tenant_name, enterprise_id)
            if team:
                return Response(generate_result("0409", "team alias is exist", "团队别名{0}在该企业已存在".format(tenant_name)))

            creater = request.data.get("creater", None)
            if not creater:
                return Response(generate_result("0412", "please specify owner", "请指定拥有者"))
            user = user_repo.get_user_by_username(creater)
            useable_regions = request.data.get("useable_regions", "")
            logger.debug("team name {0}, usable regions {1}".format(tenant_name, useable_regions))
            regions = []
            if useable_regions:
                regions = useable_regions.split(",")
            # 开启保存点
            sid = transaction.savepoint()
            code, msg, team = console_team_service.create_team(user, enter, regions, tenant_name)
            # 创建用户在团队的权限
            perm_info = {
                "user_id": user.user_id,
                "tenant_id": team.ID,
                "identity": "owner",
                "enterprise_id": enter.pk
            }
            console_perm_service.add_user_tenant_perm(perm_info)

            for r in regions:
                code, msg, tenant_region = console_region_service.create_tenant_on_region(team.tenant_name, r)
                if code != 200:
                    logger.error(msg)
                    if sid:
                        transaction.savepoint_rollback(sid)
                    return Response(generate_result("0500", "add team error", msg), status=code)

            transaction.savepoint_commit(sid)

            bean = {"tenant_name": team.tenant_name, "tenant_id": team.tenant_id, "tenant_alias": team.tenant_alias,
                    "user_num": 1}
            result = generate_result("0000", "success", "租户添加成功", bean=bean)
        except TenantOverFlowError as e:
            result = generate_result("7001", "tenant over flow", "{}".format(e.message))
        except TenantExistError as e:
            result = generate_result("7002", "tenant exist", "{}".format(e.message))
        except NoEnableRegionError as e:
            result = generate_result("7003", "no enable region", "{}".format(e.message))
        except UserNotExistError as e:
            result = generate_result("7004", "not user", "{}".format(e.message))
        except Exception as e:
            logger.exception(e)
            if sid:
                transaction.savepoint_rollback(sid)
            result = generate_error_result()
        return Response(result)
Beispiel #12
0
 def get_user_by_user_name(self, user_name):
     user = user_repo.get_user_by_username(user_name=user_name)
     if not user:
         return None
     else:
         return user
Beispiel #13
0
 def get_user_detail(self, tenant_name, nick_name):
     u = user_repo.get_user_by_username(user_name=nick_name)
     tenant = team_repo.get_tenant_by_tenant_name(tenant_name=tenant_name)
     perms = team_repo.get_tenant_perms(tenant_id=tenant.ID,
                                        user_id=u.user_id)
     return u, perms
 def get_user_by_username(self, user_name):
     return user_repo.get_user_by_username(user_name)