main #2
@ -435,6 +435,24 @@ class AliyunLightServerManager:
|
||||
jingrow.log_error("执行命令失败", f"在实例 {instance_id} 上执行命令时发生错误: {str(e)}")
|
||||
return {'success': False, 'error': str(e), 'message': '命令执行失败'}
|
||||
|
||||
def create_firewall_rule(self, instance_id, rule_protocol, port, remark=None, region_id='cn-shanghai'):
|
||||
"""为实例创建防火墙规则"""
|
||||
client = self._get_client(region_id)
|
||||
try:
|
||||
request = swas__open20200601_models.CreateFirewallRuleRequest(
|
||||
region_id=region_id,
|
||||
instance_id=instance_id,
|
||||
rule_protocol=rule_protocol,
|
||||
port=port,
|
||||
remark=remark
|
||||
)
|
||||
runtime = util_models.RuntimeOptions()
|
||||
response = client.create_firewall_rule_with_options(request, runtime)
|
||||
return {'success': True, 'data': self._convert_response_to_dict(response.body), 'message': '防火墙规则创建成功'}
|
||||
except Exception as e:
|
||||
jingrow.log_error("创建防火墙规则失败", f"为实例 {instance_id} 创建防火墙规则时发生错误: {str(e)}")
|
||||
return {'success': False, 'error': str(e), 'message': '创建防火墙规则失败'}
|
||||
|
||||
|
||||
# 全局管理器实例
|
||||
_aliyun_manager = None
|
||||
@ -1627,4 +1645,18 @@ def get_jsite_server(instance_id=None, name=None):
|
||||
|
||||
except Exception as e:
|
||||
jingrow.log_error("获取Jsite Server记录失败", f"获取服务器记录时发生错误: {str(e)}")
|
||||
return {"success": False, "message": f"获取服务器记录失败: {str(e)}"}
|
||||
return {"success": False, "message": f"获取服务器记录失败: {str(e)}"}
|
||||
|
||||
@jingrow.whitelist()
|
||||
def create_aliyun_firewall_rule(instance_id, rule_protocol, port, remark=None, region_id='cn-shanghai'):
|
||||
"""创建阿里云轻量应用服务器防火墙规则"""
|
||||
try:
|
||||
# 调用管理器创建防火墙规则
|
||||
manager = _get_manager()
|
||||
result = manager.create_firewall_rule(instance_id, rule_protocol, port, remark, region_id)
|
||||
|
||||
return result
|
||||
|
||||
except Exception as e:
|
||||
jingrow.log_error("创建防火墙规则失败", f"为实例 {instance_id} 创建防火墙规则时发生错误: {str(e)}")
|
||||
return {"success": False, "error": str(e), "message": "创建防火墙规则失败"}
|
||||
@ -58,6 +58,55 @@ jingrow.ui.form.on("Jsite Server", {
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
frm.add_custom_button(__('创建防火墙规则'), function() {
|
||||
// 弹出防火墙规则创建对话框
|
||||
let dialog = new jingrow.ui.Dialog({
|
||||
title: __('创建防火墙规则'),
|
||||
fields: [
|
||||
{
|
||||
fieldtype: 'Select',
|
||||
label: __('协议'),
|
||||
fieldname: 'rule_protocol',
|
||||
options: [
|
||||
{label: 'TCP', value: 'TCP'},
|
||||
{label: 'UDP', value: 'UDP'},
|
||||
{label: 'ICMP', value: 'ICMP'}
|
||||
],
|
||||
reqd: 1,
|
||||
default: 'TCP'
|
||||
},
|
||||
{
|
||||
fieldtype: 'Data',
|
||||
label: __('端口'),
|
||||
fieldname: 'port',
|
||||
reqd: 1,
|
||||
description: __('单个端口号或端口范围(例如:80 或 8000/9000)')
|
||||
},
|
||||
{
|
||||
fieldtype: 'Data',
|
||||
label: __('备注'),
|
||||
fieldname: 'remark',
|
||||
description: __('防火墙规则的说明(可选)')
|
||||
}
|
||||
],
|
||||
primary_action_label: __('创建'),
|
||||
primary_action: function() {
|
||||
let values = dialog.get_values();
|
||||
if (values.rule_protocol && values.port) {
|
||||
create_firewall_rule(frm, values.rule_protocol, values.port, values.remark);
|
||||
dialog.hide();
|
||||
} else {
|
||||
jingrow.msgprint({
|
||||
title: __('错误'),
|
||||
message: __('请填写协议和端口信息'),
|
||||
indicator: 'red'
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
dialog.show();
|
||||
});
|
||||
}
|
||||
|
||||
// 为password字段添加眼睛图标
|
||||
@ -141,3 +190,31 @@ function reset_system(frm) {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function create_firewall_rule(frm, rule_protocol, port, remark) {
|
||||
jingrow.call({
|
||||
method: 'jcloud.api.aliyun_server_light.create_aliyun_firewall_rule',
|
||||
args: {
|
||||
instance_id: frm.pg.instance_id,
|
||||
rule_protocol: rule_protocol,
|
||||
port: port,
|
||||
remark: remark,
|
||||
region_id: frm.pg.region
|
||||
},
|
||||
callback: function(r) {
|
||||
if (r.message && r.message.success) {
|
||||
jingrow.msgprint({
|
||||
title: __('成功'),
|
||||
message: __('防火墙规则创建成功'),
|
||||
indicator: 'green'
|
||||
});
|
||||
} else {
|
||||
jingrow.msgprint({
|
||||
title: __('错误'),
|
||||
message: r.message ? r.message.message : __('创建防火墙规则失败'),
|
||||
indicator: 'red'
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user