kboss/b/cpcc/cpccluster/add_sharedstorage1.dspy
2025-07-16 14:27:17 +08:00

149 lines
5.2 KiB
Plaintext
Raw 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 new_cluster(params_kw={}):
# params_kw:
# cpcid
# cluster_type
# ctl_nodeid
# cluster_name
debug(f'{params_kw=}')
dbname = get_module_dbname('cpcc')
dbname = 'kboss'
db = DBPools()
cpcid = params_kw.cpcid
nodeid = params_kw.ctl_nodeid
cluster_type = params_kw.cluster_type
cluster_name = params_kw.cluster_name
enable_date = params_kw.enable_date
export_date = params_kw.export_date
# debug(f"=====> {cluster_type=} {cluster_name=} {nodeid=} {cpcid=}")
async with db.sqlorContext(dbname) as sor:
cpcs = await sor.R('cpclist', {'id':cpcid})
if len(cpcs) < 1:
e = Exception(f'cpclist {cpcid=} not exists')
exception(f'{e}')
raise e
cpc = cpcs[0]
nodes = await sor.R('cpcnode', {'id':nodeid})
# 这里有问题:没有匹配到节点信息!!!
if len(nodes) < 1:
e = Exception(f'cpcnode {nodeid=} 节点基础信息不匹配')
exception(f'{e}')
raise e
node = nodes[0]
url = cpc.pcapi_url + "/pcapi/api/v1/cluster/common/new_cluster"
debug(f"请求url: {url=}")
debug(f"目标IP认证信息: {node.ip=} {node.sshport=} {node.adminuser=} {node.adminpwd=}")
# 请求方式待定,取决于获取参数值方式
debug(333)
headers = basic_auth_headers('ysh', 'Kyy@123456')
debug(22)
hc = HttpClient()
print(444)
import requests
params = {
'cluster_type': cluster_type,
'host':node.ip,
'port':node.sshport,
'user':node.adminuser,
'password':node.adminpwd,
'role':"master"
}
debug(f'{params=}')
debug(1111111)
#resp = await hc.request(url, method='POST',
# headers = headers,
# data=params
#)
# 框架不支持超时时间
resp = requests.post(url,
headers = headers,
data=params,
timeout=500,
verify=False
)
resp = json.dumps(resp.json()) #这里模拟hc.request返回的结果写后续逻辑
debug(f'{type(resp)=}->{resp=}')
debug(f"pcapi返回值: {json.loads(resp)=}")
2datas = json.loads(resp).get('data')
2datas = 2datas.split("\n")
clusterjoin = 2datas[0]
kubeconfig_context = 2datas[1]
if json.loads(resp).get("status") == True:
# new cluster info write to database
# update node_status to '1' cpcnode record identify by ctl_nodeid ctl_node
clusterid = uuid()
ns = {
'id':clusterid,
'clustertype':cluster_type,
'cpcid':cpcid,
'controllerid':nodeid,
'name':cluster_name,
'enable_date':enable_date,
'export_date':export_date,
'clusterjoin':clusterjoin,
'kubeconfig':kubeconfig_context
}
debug(f"新集群元数据: {ns=}")
await sor.C('cpccluster', ns)
node_ns = {
'id':nodeid,
'node_status':'1',
'clusterid':clusterid,
'cpcid':cpcid,
'role':'master'
}
debug(f"更新控制节点元数据 {node_ns=}")
await sor.U('cpcnode', node_ns)
debug(f"###集群新增数据盘部件库存(目前采用控制节点上提供NFS共享存储服务)")
# 1.选定控制节点disk中SYS和DATA子类型中较大的值作为集群数据盘存储的库存量
# -------------------- 构建参数化SQL带库存非负检查--------------------
update_data = [
('adsfadsfa', 'A', 'disk', 'AA', 'SYS', 5),
('fdgdsgfd', 'A', 'cpu', 'AA', 'INTER', 10)
]
case_clauses = []
params = []
for info in update_data:
id_val, cpcid_val, type_val, clusterid_val, model_val, delta = info
case_clauses.append(
"WHEN id = %s AND cpcid = %s AND type = %s AND clusterid = %s AND model = %s "
"THEN GREATEST(stock + %s, 0)" # 确保库存非负
)
params.extend([id_val, cpcid_val, type_val, clusterid_val, model_val, delta])
sql = """
UPDATE cpcwidget
SET stock = CASE
{case_clauses}
ELSE stock
END
""".format(case_clauses=' '.join(case_clauses))
# 执行更新
rows_affected = cursor.execute(sql, params)
# 第二种写法
update cpcwidget
set stock = case
when id = 'adsfadsfa' and cpcid = 'A' and type = 'disk' and clusterid = 'AA' and model = 'SYS'
then greatest(stock + 5, 0) -- 增加 5但若结果为负则设为 0
when id = 'fdgdsgfd' and cpcid = 'A' and type = 'cpu' and clusterid = 'AA' and model = 'INTER'
then greatest(stock + 10, 0) -- 增加 10但若结果为负则设为 0
else stock
end;
await sor.sqlExe(bsql, {})
# -------------------------- 库存操作结束 ---------------------------
return {'status': True, 'msg': f'操作成功!\n加入集群凭证: {clusterjoin}', 'data': node_ns}
else:
return {'status': False, 'msg': '算力中心服务操作失败'}
return {'status': False, 'msg': '其他错误'}
ret = await new_cluster(params_kw)
return ret