diff --git a/jcloud/api/aliyun_server_light.py b/jcloud/api/aliyun_server_light.py index 27468f8..50951d0 100644 --- a/jcloud/api/aliyun_server_light.py +++ b/jcloud/api/aliyun_server_light.py @@ -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 \ No newline at end of file + 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)} \ No newline at end of file diff --git a/jcloud/jcloud/pagetype/jsite_server/jsite_server.json b/jcloud/jcloud/pagetype/jsite_server/jsite_server.json index 5703db0..63d6aef 100644 --- a/jcloud/jcloud/pagetype/jsite_server/jsite_server.json +++ b/jcloud/jcloud/pagetype/jsite_server/jsite_server.json @@ -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", diff --git a/jcloud/jcloud/pagetype/jsite_server/jsite_server.py b/jcloud/jcloud/pagetype/jsite_server/jsite_server.py index c559280..aa4a995 100644 --- a/jcloud/jcloud/pagetype/jsite_server/jsite_server.py +++ b/jcloud/jcloud/pagetype/jsite_server/jsite_server.py @@ -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