更新密钥对创建方式

This commit is contained in:
jingrow 2025-07-28 14:04:37 +08:00
parent e996d7af82
commit d26bd67dd6
3 changed files with 56 additions and 45 deletions

View File

@ -554,37 +554,6 @@ def create_aliyun_server(order_name):
server.instance_id = instance_id server.instance_id = instance_id
server.save(ignore_permissions=True) 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.status = "交易成功"
order.save(ignore_permissions=True) order.save(ignore_permissions=True)
@ -596,3 +565,44 @@ def create_aliyun_server(order_name):
except Exception as e: except Exception as e:
jingrow.log_error("服务器创建失败", f"订单 {order_name}: {str(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)}

View File

@ -21,7 +21,7 @@
"end_date", "end_date",
"memory", "memory",
"bandwidth", "bandwidth",
"ip", "public_ip",
"running_status", "running_status",
"period", "period",
"ssh_section", "ssh_section",
@ -57,14 +57,6 @@
"label": "团队", "label": "团队",
"options": "Team" "options": "Team"
}, },
{
"fetch_from": "virtual_machine.public_ip_address",
"fieldname": "ip",
"fieldtype": "Data",
"in_list_view": 1,
"label": "公网IP",
"read_only": 1
},
{ {
"collapsible": 1, "collapsible": 1,
"fieldname": "ssh_section", "fieldname": "ssh_section",
@ -95,7 +87,8 @@
"fieldname": "instance_id", "fieldname": "instance_id",
"fieldtype": "Data", "fieldtype": "Data",
"label": "实例ID", "label": "实例ID",
"read_only": 1 "read_only": 1,
"unique": 1
}, },
{ {
"fieldname": "end_date", "fieldname": "end_date",
@ -181,11 +174,19 @@
"fieldname": "private_key", "fieldname": "private_key",
"fieldtype": "Text", "fieldtype": "Text",
"label": "Private Key私钥" "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, "index_web_pages_for_search": 1,
"links": [], "links": [],
"modified": "2025-07-28 00:57:19.288916", "modified": "2025-07-28 13:48:36.022662",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Jcloud", "module": "Jcloud",
"name": "Jsite Server", "name": "Jsite Server",

View File

@ -19,12 +19,12 @@ class JsiteServer(Document):
disk_size: DF.Data | None disk_size: DF.Data | None
end_date: DF.Date | None end_date: DF.Date | None
instance_id: DF.Data | None instance_id: DF.Data | None
ip: DF.Data | None
memory: DF.Data | None memory: DF.Data | None
order_id: DF.Data | None order_id: DF.Data | None
period: DF.Int period: DF.Int
planid: DF.Data | None planid: DF.Data | None
private_key: DF.Text | None private_key: DF.Text | None
public_ip: DF.Data | None
region: DF.Data | None region: DF.Data | None
running_status: DF.Literal["", "\u8fd0\u884c\u4e2d", "\u5df2\u505c\u673a"] running_status: DF.Literal["", "\u8fd0\u884c\u4e2d", "\u5df2\u505c\u673a"]
ssh_port: DF.Int ssh_port: DF.Int