async def volcengineuser_synchronization(ns): """ 用户同步火山云 """ db = DBPools() async with db.sqlorContext('kboss') as sor: userdata = await sor.R('users',{'id': await get_user()}) org = await sor.R('organization',{'id':userdata[0]['orgid']}) if len(org) < 1: return {'status': False, 'msg': '用户信息错误'} try: res = await volcengine_requestapi(method="GET", action="ListProjects", body=None, version='2021-08-01') #Project 1为已有项目 0为未开通项目 Project = 0 for i in res['Result']['Projects']: if i['ProjectName'] == org[0]['orgname']: Project += 1 # 判断该用户的机构是否已经创建过项目,未开通项目则调用开通项目函数 if Project == 0: await volcengine_requestapi(method="GET", action="CreateProject", body="ProjectName="+ org[0]['contactor_phone']+ "&DisplayName="+ org[0]['orgname'], version='2021-08-01') #根据用户名在火山云查询该用户 volcengine_user = await volcengine_requestapi(method="GET", action="ListUsers", query={"Query": userdata[0]['username']}, version='2018-01-01') # 判断用户是否开通过火山云子账户 Total 0则为没有账号 进行开通子账号,配置控制台密码 if volcengine_user['Result']['Total'] == 0: #开通子账号 await volcengine_requestapi(method="GET", action="CreateUser", query={"UserName": userdata[0]['username'],'DisplayName':userdata[0]['username']},version='2018-01-01') #解析kboss密码 password = 'Vol' + password_decode(userdata[0]['password']) # 配置控制台密码 await volcengine_requestapi(method="GET", action="CreateLoginProfile", query={"UserName": userdata[0]['username'],'Password':password,'LoginAllowed':'True'}, version='2018-01-01') ProjectNames = ['CENFullAccess','AutoScalingFullAccess','CLBFullAccess','NATFullAccess','TOSFullAccess','vePFSFullAccess', 'DMSFullAccess','FileNASFullAccess','ECSFullAccess','EIPFullAccess','VPCFullAccess'] #数据库 自定义策略:DescribeDBInstance (火山云还在开发,目前先不加,火山云开发完毕后,只需要在上面ProjectNames列表里加入 "DescribeDBInstance" 参数) for i in ProjectNames: await volcengine_requestapi(method="GET", action="AttachPolicyInProject", body="PolicyType=System&PrincipalType=User&PolicyName=" + i + "&PrincipalName=" +userdata[0]['username'] + "&ProjectName.1=" + org[0]['contactor_phone'], version='2021-08-01') return {'status': True, 'msg': '用户同步成功'} except Exception as e: raise e return {'status': False, 'msg': '用户同步失败'} ret = await volcengineuser_synchronization(params_kw) return ret