kboss/b/coer_old/volcengineuser_synchronization.dspy
2025-07-16 14:27:17 +08:00

49 lines
3.2 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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