138 lines
4.3 KiB
Plaintext
138 lines
4.3 KiB
Plaintext
|
||
ns = {
|
||
'id':params_kw['id'],
|
||
}
|
||
|
||
yamlconfig_id = params_kw.get("id")
|
||
|
||
db = DBPools()
|
||
dbname = await rfexe('get_module_dbname', 'cpcc')
|
||
async with db.sqlorContext(dbname) as sor:
|
||
|
||
# 成功完成k8s资源级联删除后才可以删除数据库记录
|
||
yaml_configs = await sor.R('yaml_config', {'id':yamlconfig_id})
|
||
if len(yaml_configs) < 1:
|
||
e = Exception(f'yaml_config {yamlconfig_id=} not exists')
|
||
exception(f'{e}')
|
||
raise e
|
||
yaml_config = yaml_configs[0]
|
||
|
||
source_podengine = yaml_config.get("source_podengine")
|
||
clusterid = yaml_config.get("clusterid")
|
||
cpcid = yaml_config.get("cpcid")
|
||
debug(f'===== delete yamlconfig_id: {yamlconfig_id}')
|
||
|
||
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
|
||
kubeconfig = cpcluster.get("kubeconfig")
|
||
nodeid = cpcluster.get("controllerid")
|
||
|
||
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/delete_cpcpod"
|
||
debug(f"请求url: {url=}")
|
||
debug(f"目标IP认证信息: {node.ip=} {node.sshport=} {node.adminuser=} {password_decode(node.adminpwd)=}")
|
||
# 请求方式待定,取决于获取参数值方式
|
||
|
||
userorgid = await get_userorgid()
|
||
debug(f'当前组织ID:{userorgid}')
|
||
if not userorgid:
|
||
return {
|
||
"widgettype":"Error",
|
||
"options":{
|
||
"title":"Authorization Error",
|
||
"timeout":3,
|
||
"cwidth":16,
|
||
"cheight":9,
|
||
"message":"Please login"
|
||
}
|
||
}
|
||
|
||
headers = basic_auth_headers(cpc.api_user, password_decode(cpc.api_pwd))
|
||
ns_name = clusterid.replace("_","-") + "-" + userorgid # 集群信息+组织信息合成命名空间
|
||
ns_name = ns_name.lower()
|
||
hc = HttpClient()
|
||
|
||
# type参数:更新和新增都是为apply,删除为delete
|
||
yamlconfig_id = params_kw.get('id')
|
||
|
||
import requests
|
||
params = {
|
||
'host':node.ip,
|
||
'port':node.sshport,
|
||
'user':node.adminuser,
|
||
'psssword':password_decode(node.adminpwd),
|
||
'kubeconfig':kubeconfig,
|
||
'action':'delete',
|
||
'namespace_name': ns_name,
|
||
'serviceaccount_name': ns_name + "-serviceaccount",
|
||
'podcd_name': yamlconfig_id + "-" + source_podengine.lower(),
|
||
'service_name': yamlconfig_id + "-service", #取代+ "-" + source_name
|
||
}
|
||
params.update(yaml_config)
|
||
|
||
keys_to_remove = ['_webbricks_', 'width', 'height', '_is_mobile']
|
||
for key in keys_to_remove:
|
||
if key in params:
|
||
del params[key]
|
||
|
||
debug(f'请求pcapi参数: {params}')
|
||
|
||
# 框架不支持超时时间
|
||
resp = requests.post(url,
|
||
headers = headers,
|
||
data = params,
|
||
timeout = 500
|
||
)
|
||
|
||
debug(f'{type(resp)}->{resp}')
|
||
resp = json.dumps(resp.json()) #这里模拟hc.request返回的结果写后续逻辑
|
||
data = json.loads(resp).get('data')
|
||
keys_to_remove = ['host', 'port', 'user', 'psssword', 'kubeconfig']
|
||
for key in keys_to_remove:
|
||
if key in params:
|
||
del params[key]
|
||
params['id'] = yamlconfig_id
|
||
|
||
if json.loads(resp).get("status") == True:
|
||
|
||
r = await sor.D('yaml_config', ns)
|
||
debug('级联删除集群资源成功');
|
||
return {
|
||
"widgettype":"Message",
|
||
"options":{
|
||
"title":"级联删除集群资源成功",
|
||
"timeout":3,
|
||
"cwidth":16,
|
||
"cheight":9,
|
||
"message":"ok"
|
||
}
|
||
}
|
||
|
||
debug('级联删除集群资源失败');
|
||
return {
|
||
"widgettype":"Error",
|
||
"options":{
|
||
"title":"级联删除集群资源失败",
|
||
"timeout":3,
|
||
"cwidth":16,
|
||
"cheight":9,
|
||
"message":"failed"
|
||
}
|
||
} |