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