76 lines
2.7 KiB
Plaintext
76 lines
2.7 KiB
Plaintext
async def setup_cpclabel(params_kw={}):
|
|
ns = params_kw.copy()
|
|
debug(f"当前资源标签操作:{ns}")
|
|
|
|
cpcid = ns.get('cpcid')
|
|
clusterid = ns.get('clusterid')
|
|
label = ns.get('label')
|
|
worker_node = ns.get('worker_node')
|
|
opt = ns.get('opt')
|
|
if not all([cpcid,clusterid,label,worker_node,opt]):
|
|
return {'status': False,'msg': f'参数缺少:{ns}'}
|
|
|
|
db = DBPools()
|
|
dbname = 'kboss'
|
|
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]
|
|
cpclusters = await sor.R('cpccluster', {'id': clusterid})
|
|
if len(cpclusters) < 1:
|
|
e = Exception(f'cpclist {clusterid=} not exists')
|
|
exception(f'{e}')
|
|
raise e
|
|
cpcluster = cpclusters[0]
|
|
# 此处的nodeid即控制节点id
|
|
nodeid = cpcluster.get("controllerid")
|
|
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/node_label_opt"
|
|
debug(f"请求url: {url=}")
|
|
debug(f"目标IP认证信息: {node.ip=} {node.sshport=} {node.adminuser=} {node.adminpwd=}")
|
|
# 请求方式待定,取决于获取参数值方式
|
|
|
|
headers = basic_auth_headers(cpc.api_user, cpc.api_pwd)
|
|
|
|
hc = HttpClient()
|
|
|
|
import requests
|
|
params = {
|
|
'host': node.ip,
|
|
'port': node.sshport,
|
|
'user': node.adminuser,
|
|
'password': node.adminpwd,
|
|
'worker_node': worker_node,
|
|
'label': label,
|
|
'opt': opt
|
|
}
|
|
debug(f'{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)=}")
|
|
data = json.loads(resp).get('data')
|
|
time.sleep(0.5)
|
|
if json.loads(resp).get("status") == True:
|
|
return {'status': True, 'msg': '设置节点标签成功', 'data': ns}
|
|
return {'status': False, 'msg': '设置节点标签失败,请检查标签是否已被操作'}
|
|
|
|
ret = await setup_cpclabel(params_kw)
|
|
return ret
|