更新密钥对创建方式
This commit is contained in:
parent
e996d7af82
commit
d26bd67dd6
@ -553,38 +553,7 @@ def create_aliyun_server(order_name):
|
|||||||
server.running_status = "运行中"
|
server.running_status = "运行中"
|
||||||
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)
|
||||||
@ -595,4 +564,45 @@ 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)}
|
||||||
@ -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",
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user