From 273c144271f2bdf6e53487778586cfa2a0417e36 Mon Sep 17 00:00:00 2001 From: jingrow Date: Mon, 28 Jul 2025 21:27:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=87=8D=E7=BD=AE=E5=AF=86?= =?UTF-8?q?=E9=92=A5=E5=AF=B9=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jcloud/api/aliyun_server_light.py | 20 +++++++- .../pagetype/jsite_server/jsite_server.js | 49 ++++++++++++++++++- 2 files changed, 65 insertions(+), 4 deletions(-) diff --git a/jcloud/api/aliyun_server_light.py b/jcloud/api/aliyun_server_light.py index fdee79c..7a82fd2 100644 --- a/jcloud/api/aliyun_server_light.py +++ b/jcloud/api/aliyun_server_light.py @@ -762,7 +762,7 @@ def create_aliyun_server(order_name): raise Exception("找不到对应的服务器记录") # 从服务器记录中获取配置信息 - region_id = server.region or 'cn-shanghai' + region_id = server.region image_id = server.image_id or 'e9363571cf2444aba422b17470285465' plan_id = server.planid or 'swas.s.c2m1s30b1.linux' period = server.period or 1 @@ -863,7 +863,7 @@ def update_server_record(instance_ids): jingrow.log_error("更新服务器信息失败", f"找不到实例ID为 {instance_id} 的Jsite Server记录") return {"success": False, "message": f"找不到实例ID为 {instance_id} 的Jsite Server记录"} - region_id = server.region or 'cn-shanghai' + region_id = server.region # 获取阿里云实例详细信息 instance_details = get_aliyun_instance_details(instance_ids, region_id) @@ -930,4 +930,20 @@ def update_server_record(instance_ids): except Exception as e: jingrow.log_error("更新服务器信息失败", f"更新服务器信息时发生错误: {str(e)}") + return {"success": False, "message": str(e)} + +@jingrow.whitelist() +def reset_server_key_pair(instance_id): + """重置服务器密钥对:先删除旧的,再创建新的""" + try: + # 第一步:删除旧的密钥对(如果存在) + delete_aliyun_instance_key_pair(instance_id) + + # 第二步:创建新的密钥对 + result = create_server_key_pair(instance_id) + + return result + + 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.js b/jcloud/jcloud/pagetype/jsite_server/jsite_server.js index a185715..ff17885 100644 --- a/jcloud/jcloud/pagetype/jsite_server/jsite_server.js +++ b/jcloud/jcloud/pagetype/jsite_server/jsite_server.js @@ -38,6 +38,16 @@ jingrow.ui.form.on("Jsite Server", { __('重置服务器密码') ); }); + + frm.add_custom_button(__('重置密钥对'), function() { + // 弹出确认对话框 + jingrow.confirm( + __('确定要重置密钥对吗?这将删除旧的密钥对并创建新的密钥对。重置后需要使用新的私钥才能连接服务器。'), + function() { + reset_key_pair(frm); + } + ); + }); } // 为password字段添加眼睛图标 @@ -87,7 +97,7 @@ function restart_server(frm) { method: 'jcloud.api.aliyun_server_light.reboot_aliyun_instance', args: { instance_id: frm.pg.instance_id, - region_id: frm.pg.region || 'cn-shanghai' + region_id: frm.pg.region }, callback: function(r) { if (r.success) { @@ -123,7 +133,7 @@ function reset_password(frm, new_password) { args: { instance_id: frm.pg.instance_id, password: new_password, - region_id: frm.pg.region || 'cn-shanghai' + region_id: frm.pg.region }, callback: function(r) { if (r.success) { @@ -153,3 +163,38 @@ function reset_password(frm, new_password) { } }); } + +function reset_key_pair(frm) { + jingrow.call({ + method: 'jcloud.api.aliyun_server_light.reset_server_key_pair', + args: { + instance_id: frm.pg.instance_id + }, + callback: function(r) { + if (r.success) { + jingrow.msgprint({ + title: __('成功'), + message: __('密钥对重置成功,新的私钥已保存到服务器记录中'), + indicator: 'green' + }); + // 刷新页面以显示新的密钥对信息 + setTimeout(function() { + frm.reload_pg(); + }, 2000); + } else { + jingrow.msgprint({ + title: __('重置失败'), + message: r.message || r.error || __('未知错误'), + indicator: 'red' + }); + } + }, + error: function(err) { + jingrow.msgprint({ + title: __('重置失败'), + message: err.message, + indicator: 'red' + }); + } + }); +}