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)
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)
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
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
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()
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))
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}
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()
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)
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
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)