main #2
@ -553,38 +553,7 @@ def create_aliyun_server(order_name):
|
||||
server.running_status = "运行中"
|
||||
server.instance_id = instance_id
|
||||
server.save(ignore_permissions=True)
|
||||
|
||||
# 自动创建密钥对
|
||||
try:
|
||||
key_pair_name = f"{region_id}-{instance_id[:8]}"
|
||||
key_pair_result = create_aliyun_instance_key_pair(instance_id, key_pair_name, region_id)
|
||||
|
||||
# 打印密钥对创建结果到后台日志
|
||||
jingrow.log_error("密钥对创建结果", f"实例 {instance_id} 的密钥对创建结果: {key_pair_result}")
|
||||
|
||||
if key_pair_result and key_pair_result.get('success'):
|
||||
jingrow.log_error("密钥对创建成功", f"实例 {instance_id} 自动创建密钥对 {key_pair_name} 成功")
|
||||
|
||||
# 获取并保存密钥对信息
|
||||
key_pair_data = key_pair_result.get('data', {})
|
||||
private_key = key_pair_data.get('private_key')
|
||||
|
||||
if private_key:
|
||||
# 保存私钥到服务器记录中(阿里云不返回公钥,会自动配置到实例中)
|
||||
server.key_pair_name = key_pair_name
|
||||
server.private_key = private_key
|
||||
# 公钥字段留空,因为阿里云会自动处理
|
||||
server.public_key = ""
|
||||
jingrow.log_error("私钥已保存", f"实例 {instance_id} 的私钥已保存到服务器记录中,公钥由阿里云自动配置")
|
||||
else:
|
||||
jingrow.log_error("私钥获取失败", f"实例 {instance_id} 创建密钥对成功但未获取到私钥")
|
||||
|
||||
server.save(ignore_permissions=True)
|
||||
else:
|
||||
jingrow.log_error("密钥对创建失败", f"实例 {instance_id} 自动创建密钥对失败: {key_pair_result.get('message', '未知错误')}")
|
||||
except Exception as key_error:
|
||||
jingrow.log_error("密钥对创建异常", f"实例 {instance_id} 自动创建密钥对时发生异常: {str(key_error)}")
|
||||
|
||||
|
||||
# 更新订单状态
|
||||
order.status = "交易成功"
|
||||
order.save(ignore_permissions=True)
|
||||
@ -595,4 +564,45 @@ def create_aliyun_server(order_name):
|
||||
|
||||
except Exception as e:
|
||||
jingrow.log_error("服务器创建失败", f"订单 {order_name}: {str(e)}")
|
||||
raise e
|
||||
raise e
|
||||
|
||||
@jingrow.whitelist()
|
||||
def create_server_key_pair(instance_id):
|
||||
"""为实例创建密钥对并保存私钥"""
|
||||
try:
|
||||
# 查找对应的服务器记录获取region_id
|
||||
server = jingrow.get_pg("Jsite Server", {"instance_id": instance_id})
|
||||
if not server:
|
||||
jingrow.log_error("找不到对应的服务器记录")
|
||||
|
||||
region_id = server.region
|
||||
key_pair_name = f"{region_id}-{instance_id[:8]}"
|
||||
|
||||
# 调用阿里云API创建密钥对
|
||||
key_pair_result = create_aliyun_instance_key_pair(instance_id, key_pair_name, region_id)
|
||||
|
||||
if not key_pair_result or not key_pair_result.get('success'):
|
||||
jingrow.log_error(f"密钥对创建失败: {key_pair_result.get('message', '未知错误')}")
|
||||
|
||||
# 获取私钥
|
||||
key_pair_data = key_pair_result.get('data', {})
|
||||
private_key = key_pair_data.get('private_key')
|
||||
|
||||
if private_key:
|
||||
# 保存私钥到服务器记录
|
||||
server.key_pair_name = key_pair_name
|
||||
server.private_key = private_key
|
||||
server.save(ignore_permissions=True)
|
||||
|
||||
return {
|
||||
"success": True,
|
||||
"message": "密钥对创建成功",
|
||||
"key_pair_name": key_pair_name,
|
||||
"private_key": private_key
|
||||
}
|
||||
else:
|
||||
jingrow.log_error("密钥对创建成功但未获取到私钥")
|
||||
|
||||
except Exception as e:
|
||||
jingrow.log_error("创建密钥对失败", f"实例 {instance_id}: {str(e)}")
|
||||
return {"success": False, "message": str(e)}
|
||||
@ -21,7 +21,7 @@
|
||||
"end_date",
|
||||
"memory",
|
||||
"bandwidth",
|
||||
"ip",
|
||||
"public_ip",
|
||||
"running_status",
|
||||
"period",
|
||||
"ssh_section",
|
||||
@ -57,14 +57,6 @@
|
||||
"label": "团队",
|
||||
"options": "Team"
|
||||
},
|
||||
{
|
||||
"fetch_from": "virtual_machine.public_ip_address",
|
||||
"fieldname": "ip",
|
||||
"fieldtype": "Data",
|
||||
"in_list_view": 1,
|
||||
"label": "公网IP",
|
||||
"read_only": 1
|
||||
},
|
||||
{
|
||||
"collapsible": 1,
|
||||
"fieldname": "ssh_section",
|
||||
@ -95,7 +87,8 @@
|
||||
"fieldname": "instance_id",
|
||||
"fieldtype": "Data",
|
||||
"label": "实例ID",
|
||||
"read_only": 1
|
||||
"read_only": 1,
|
||||
"unique": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "end_date",
|
||||
@ -181,11 +174,19 @@
|
||||
"fieldname": "private_key",
|
||||
"fieldtype": "Text",
|
||||
"label": "Private Key(私钥)"
|
||||
},
|
||||
{
|
||||
"fetch_from": "virtual_machine.public_ip_address",
|
||||
"fieldname": "public_ip",
|
||||
"fieldtype": "Data",
|
||||
"in_list_view": 1,
|
||||
"label": "公网IP",
|
||||
"read_only": 1
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2025-07-28 00:57:19.288916",
|
||||
"modified": "2025-07-28 13:48:36.022662",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Jcloud",
|
||||
"name": "Jsite Server",
|
||||
|
||||
@ -19,12 +19,12 @@ class JsiteServer(Document):
|
||||
disk_size: DF.Data | None
|
||||
end_date: DF.Date | None
|
||||
instance_id: DF.Data | None
|
||||
ip: DF.Data | None
|
||||
memory: DF.Data | None
|
||||
order_id: DF.Data | None
|
||||
period: DF.Int
|
||||
planid: DF.Data | None
|
||||
private_key: DF.Text | None
|
||||
public_ip: DF.Data | None
|
||||
region: DF.Data | None
|
||||
running_status: DF.Literal["", "\u8fd0\u884c\u4e2d", "\u5df2\u505c\u673a"]
|
||||
ssh_port: DF.Int
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user